{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "from itertools import combinations\n",
    "import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def select_dict(dicts, hparam_name, hparam_value):\n",
    "    closest_hparam_dist = float(\"inf\")\n",
    "    closest_dict = None\n",
    "    closest_val = None\n",
    "\n",
    "    for dict, hparam in dicts:\n",
    "        hparam_dist = abs(hparam[hparam_name] - hparam_value)\n",
    "        if hparam_dist < closest_hparam_dist:\n",
    "            closest_hparam_dist = hparam_dist\n",
    "            closest_dict = dict\n",
    "            closest_val = hparam[hparam_name]\n",
    "    \n",
    "    return closest_dict, closest_val"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MLP out L1: 0.0008576958789490163\n",
      "Residual stream L1: 0.0008576958789490163\n",
      "Upstream zero L1 baseline: 9.999999747378752e-05\n"
     ]
    }
   ],
   "source": [
    "#upstream_dicts = torch.load(\"/home/mchorse/sparse_coding_hoagy/tiedlong_tied_residual_l3_r4/_80/learned_dicts.pt\")\n",
    "#downstream_dicts = torch.load(\"/home/mchorse/sparse_coding_hoagy/tiedlong_tied_residual_l4_r4/_80/learned_dicts.pt\")\n",
    "\n",
    "upstream_dicts = torch.load(\"/mnt/ssd-cluster/bigrun0308/tied_residual_l2_r4/_9/learned_dicts.pt\")\n",
    "downstream_dicts = torch.load(\"/mnt/ssd-cluster/bigrun0308/tied_residual_l3_r4/_9/learned_dicts.pt\")\n",
    "\n",
    "target_l1 = 8e-4\n",
    "\n",
    "upstream_dict, l1_up = select_dict(upstream_dicts, \"l1_alpha\", target_l1)\n",
    "downstream_dict, l1_down = select_dict(downstream_dicts, \"l1_alpha\", target_l1)\n",
    "\n",
    "print(f\"MLP out L1: {l1_up}\")\n",
    "print(f\"Residual stream L1: {l1_down}\")\n",
    "\n",
    "upstream_feats = upstream_dict.get_learned_dict()\n",
    "downstream_feats = downstream_dict.get_learned_dict()\n",
    "\n",
    "upstream_zero_l1_baseline, true_baseline_l1 = select_dict(upstream_dicts, \"l1_alpha\", 0.0)\n",
    "\n",
    "print(f\"Upstream zero L1 baseline: {true_baseline_l1}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# thanks stack overflow\n",
    "def gini(x):\n",
    "    x.sort()\n",
    "    total = 0\n",
    "    for i, xi in enumerate(x[:-1], 1):\n",
    "        total += np.sum(np.abs(xi - x[i:]))\n",
    "    return total / (len(x)**2 * np.mean(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# already normed\n",
    "cosine_sim = torch.abs(torch.einsum(\"md,rd->mr\", upstream_feats, downstream_feats))\n",
    "baseline_cosine_sim = torch.abs(torch.einsum(\"md,rd->mr\", upstream_zero_l1_baseline.get_learned_dict(), downstream_feats))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████| 2048/2048 [00:00<00:00, 6220082.98it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████| 2048/2048 [00:00<00:00, 6716133.38it/s]\n"
     ]
    }
   ],
   "source": [
    "up_gini = []\n",
    "for f_idx in tqdm.tqdm(range(cosine_sim.shape[0])):\n",
    "    #up_gini.append(gini(cosine_sim[f_idx].cpu().numpy()))\n",
    "    continue\n",
    "\n",
    "rand_gini = []\n",
    "for f_idx in tqdm.tqdm(range(baseline_cosine_sim.shape[0])):\n",
    "    #rand_gini.append(gini(baseline_cosine_sim[f_idx].cpu().numpy()))\n",
    "    continue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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8vX1ddjv119/1U033SQPDw8NGTJEoaGh2rt3r/773//qxRdf1H333afffvtNn3zyiaZNm2Y7xbVSpUoOH++3337Tb7/9poceekjlypUr8PizvPzyy3J1ddUTTzyh1NRUvfrqq+rdu7d++umnfD3O999/r+PHj2vEiBF5eoc1OTlZrVu31tmzZ/XYY4+pYsWKmjNnju6++24tXLhQ9957ryQpMzNTd999t77//nsNGTJEDRo00NatWzVt2jT99ttvWrp0qSpVqqS5c+fqxRdf1OnTpxUXFydJatCggebOnauRI0eqevXqGj16tKRLc3v06NFsY7ra7yonc+fOVb9+/RQTE6NXXnlFZ8+e1dtvv622bdtq06ZNdqe8ZmRkKCYmRpGRkXrttde0evVqTZkyRWFhYXrkkUdUqVIlvf3223rkkUd077336r777pMkNW3aVJLUtWtXbd++XcOHD1doaKhSUlK0atUqHTx4sMRf+AAoLFmnJVaoUMHWlpaWpvfee0+9evXS4MGDderUKf3f//2fYmJitGHDBtvFJrLMmzdPp06d0r///W+5uLjo1Vdf1X333ac//vjDdvbBypUr1bVrVzVs2FBxcXH6+++/NWDAAFWvXt3usYwxuvvuu7V27VoNGjRIzZs319dff60xY8bo8OHD2c6M+O6777Rs2TINHTpUkhQXF6c777xTTz75pN566y09+uijOnHihF599VUNHDjwqp8XXr58uerUqaPIyMiCTKed77//XosXL9ajjz6q8uXL64033lDXrl118OBBVaxYMc+Pc/bsWcXHx6tdu3aqUaPGVfvnZw7z8hpj+vTp+vDDD7VkyRK9/fbbKleunJo2bao6dero3Xff1YYNG/Tee+9JUo6n9J8+fVo33XSTdu7cqYEDB6pFixY6duyYli1bpj///NPhR1Ykafv27WrTpo2qVaumsWPHysfHR5999pm6dOmiRYsW2epfluHDh6tChQqKjY3V/v37NX36dA0bNkyffvqpJGn69OkaPny4ypUrp/Hjx0uSgoKCJF36CE1cXJzttVpaWpp++eUXbdy4UbfccstV5x2FzMmhEU5W0CNt1apVM2lpabb2zz77zEgyr7/+ujHGmE2bNhlJZsGCBbmu38fHJ9s7T5ePq1evXnbt+/fvN25ububFF1+0a9+6datxd3e3a7/yiJoxxsTF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jBkz7NqnTZsmFxcXhzW6MD355JMqW7asBg4cqOTk5Gz3O6NmSJcCszFGffr0cXj6ZmJioubMmSMp73OY19cYhaFr167asmWLlixZku2+nOa0cuXK6tChg9555x0dOXIk2/0FqRlSzq/FrtzecuXKqU6dOtQMJ+FI23WucuXKmjhxop555hm1a9dOd999t8qWLav169frk08+0a233qq77ror23IBAQFq27atBgwYoOTkZE2fPl116tTR4MGDJUlr1qzRsGHDdP/996tevXq6ePGi5s6dKzc3N7tzuCMiIrR69WpNnTpVVatWVa1atXK9rHBYWJheeOEFjRs3Tvv371eXLl1Uvnx57du3T0uWLNGQIUP0xBNPKDw8XGFhYXriiSd0+PBh+fr6atGiRcV+AYbffvtNH330kYwxSktL05YtW7RgwQKdPn1aU6dO1W233Zbr8m+88Ybatm2rFi1aaMiQIapVq5b279+vL774wnahkIiICEmXvoC6Z8+e8vDw0F133ZXjUbQHHnhA27ZtU1xcnDZs2KCePXuqVq1aOnPmjLZt26ZPPvlE5cuXt/sQfXEYM2aMtm/frilTpmjt2rXq1q2bgoODlZSUpKVLl2rDhg1av369JGns2LH65JNPdPvtt+uxxx5TQECA5syZo3379mnRokW2L3nt06ePPvvsMz388MNau3at2rRpo4yMDO3atUufffaZvv76a9tpUdcqL7+rK/n6+urtt99Wnz591KJFC/Xs2VOVKlXSwYMH9cUXX6hNmzbZXmRcTZkyZdSwYUN9+umnqlevngICAtS4cWNdvHhRnTp1Uvfu3dWwYUO5u7tryZIlSk5OVs+ePQthBoDSY8yYMbr//vs1e/ZsPfzww7rzzju1ePFi3XvvvercubP27dunWbNmqWHDhg4DQ17ExcWpc+fOatu2rQYOHKjjx4/rzTffVKNGjewe86677lLHjh01fvx47d+/X82aNdPKlSv1+eefa8SIEdm+Kqew1a1bV/PmzVOvXr1Uv3599e7dW82aNZMxRvv27dO8efPk6uqa5489FJbWrVtr5syZevTRRxUeHq4+ffqobt26OnXqlNatW6dly5bZzurJ6xzm9TVGYRgzZowWLlyo+++/XwMHDlRERISOHz+uZcuWadasWWrWrJnD5WbOnKm2bduqSZMmGjx4sGrXrq3k5GQlJCTozz//1JYtW/I9loiICL399tt64YUXVKdOHVWuXFk333yzGjZsqA4dOigiIkIBAQH65ZdftHDhQg0bNuxaNx8FUQxXqEQJ8NFHH5kbb7zR+Pj4GC8vLxMeHm6effZZu0vKGvO/S71/8sknZty4caZy5cqmTJkypnPnznaXOv/jjz/MwIEDTVhYmPH29jYBAQGmY8eOZvXq1XaPt2vXLtOuXTtTpkwZIwdfrp3TVxEsWrTItG3b1vj4+BgfHx8THh5uhg4danbv3m3rs2PHDhMdHW3KlStnAgMDzeDBg22XCb788rk5XZ43P5eAd0SXfVGlq6ur8ff3NzfccIN5/PHHzfbt27P1z+lLNLdt22buvfde4+/vb7y9vU39+vXNhAkT7Po8//zzplq1asbV1TXPl/9ft26d6datm6lSpYrx8PAwvr6+pmXLliY2NtYcOXIk21w4uuT/lV/p4Ggb8nLJ/8stXLjQ3HrrrSYgIMC4u7ubKlWqmB49eph169bZ9cv6cu2seWnVqpXDL9c+f/68eeWVV2xfYFuhQgUTERFhnn32WZOammq3jddyyX9jrv67yulS1mvXrjUxMTHGz8/PeHt7m7CwMNO/f3/zyy+/2Prk9Dx1dGnt9evXm4iICOPp6Wm7/P+xY8fM0KFDTXh4uPHx8TF+fn4mMjLSfPbZZ9keE7ge5PTl2sYYk5GRYcLCwkxYWJi5ePGiyczMNC+99JKpWbOm8fLyMjfccINZvnx5tv3b5V+ufaWsv8XLLVq0yDRo0MB4eXmZhg0b5vjl2qdOnTIjR440VatWNR4eHqZu3bq5frn25XIaU0778Zz8/vvv5pFHHjF16tQx3t7epkyZMiY8PNw8/PDDZvPmzXZ9c/ty7StdeSn8vH65dpbExETzwAMP2OamQoUKplOnTmbOnDm2r38xJu9zaEzeXmNc6yX/jTHm77//NsOGDTPVqlUznp6epnr16qZfv37m2LFjxpica83evXtN3759TXBwsPHw8DDVqlUzd955p1m4cGG2ebzy+Z31e1+7dq2tLSkpyXTu3NmUL1/e7su1X3jhBdOqVSvj7+9v+32/+OKL5vz589l/EShyLsY46bg2SqR169apY8eOWrBggbp16+bs4QAAAAClHp9pAwAAAAALI7QBAAAAgIUR2gAAAADAwvhMGwAAAABYGEfaAAAAAMDCCG0AAAAAYGF8uXYhyMzM1F9//aXy5cvLxcXF2cMBgOuGMUanTp1S1apVbV+qDuoSADhTUdQmQlsh+OuvvxQSEuLsYQDAdevQoUOqXr26s4dhGdQlAHC+wqxNhLZCUL58eUmXfjG+vr5OHg0AXD/S0tIUEhJi2w/jEuoSADhPUdQmQlshyDr1xNfXl+IIAE7AKYD2qEsA4HyFWZv4AAAAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFlbjQNnPmTIWGhsrb21uRkZHasGFDrv0XLFig8PBweXt7q0mTJlqxYkWOfR9++GG5uLho+vTphTxqAEBpRm0CABSlEhXaPv30U40aNUqxsbHauHGjmjVrppiYGKWkpDjsv379evXq1UuDBg3Spk2b1KVLF3Xp0kXbtm3L1nfJkiX68ccfVbVq1aLeDABAKUJtAgAUtRIV2qZOnarBgwdrwIABatiwoWbNmqWyZcvq/fffd9j/9ddf12233aYxY8aoQYMGev7559WiRQvNmDHDrt/hw4c1fPhwffzxx/Lw8CiOTQEAlBLUJgBAUSsxoe38+fNKTExUdHS0rc3V1VXR0dFKSEhwuExCQoJdf0mKiYmx65+Zmak+ffpozJgxatSoUZ7Gkp6errS0NLsbAOD6Y5XaRF0CgNKtxIS2Y8eOKSMjQ0FBQXbtQUFBSkpKcrhMUlLSVfu/8sorcnd312OPPZbnscTFxcnPz892CwkJyceWAABKC6vUJuoSAJRuJSa0FYXExES9/vrrmj17tlxcXPK83Lhx45Sammq7HTp0qAhHCQC4nhSkNlGXAKB0KzGhLTAwUG5ubkpOTrZrT05OVnBwsMNlgoODc+3/3XffKSUlRTVq1JC7u7vc3d114MABjR49WqGhoTmOxcvLS76+vnY3AMD1xyq1iboEAKVbiQltnp6eioiIUHx8vK0tMzNT8fHxioqKcrhMVFSUXX9JWrVqla1/nz599Ouvv2rz5s22W9WqVTVmzBh9/fXXRbcxAIBSgdoEACgO7s4eQH6MGjVK/fr1U8uWLdWqVStNnz5dZ86c0YABAyRJffv2VbVq1RQXFydJevzxx9W+fXtNmTJFnTt31vz58/XLL7/o3XfflSRVrFhRFStWtFuHh4eHgoODVb9+/eLdOABAiURtAgAUtRIV2nr06KGjR49q4sSJSkpKUvPmzfXVV1/ZPtB98OBBubr+7+Bh69atNW/ePD3zzDN6+umnVbduXS1dulSNGzd21iYAAEoZahMAoKi5GGOMswdR0qWlpcnPz0+pqal8jgAAihH7X8eYFwBwnqLYB5eYz7QBAAAAwPWI0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALK3GhbebMmQoNDZW3t7ciIyO1YcOGXPsvWLBA4eHh8vb2VpMmTbRixQrbfRcuXNBTTz2lJk2ayMfHR1WrVlXfvn31119/FfVmAABKEWoTAKAolajQ9umnn2rUqFGKjY3Vxo0b1axZM8XExCglJcVh//Xr16tXr14aNGiQNm3apC5duqhLly7atm2bJOns2bPauHGjJkyYoI0bN2rx4sXavXu37r777uLcLABACUZtAgAUNRdjjHH2IPIqMjJS//rXvzRjxgxJUmZmpkJCQjR8+HCNHTs2W/8ePXrozJkzWr58ua3txhtvVPPmzTVr1iyH6/j555/VqlUrHThwQDVq1MjTuNLS0uTn56fU1FT5+voWYMsAAAVhhf2vFWuTFeYFAK5XRbEPLjFH2s6fP6/ExERFR0fb2lxdXRUdHa2EhASHyyQkJNj1l6SYmJgc+0tSamqqXFxc5O/vn2Of9PR0paWl2d0AANcfq9Qm6hIAlG4lJrQdO3ZMGRkZCgoKsmsPCgpSUlKSw2WSkpLy1f/cuXN66qmn1KtXr1xTcVxcnPz8/Gy3kJCQfG4NAKA0sEptoi4BQOlWYkJbUbtw4YK6d+8uY4zefvvtXPuOGzdOqampttuhQ4eKaZQAgOtJXmsTdQkASjd3Zw8grwIDA+Xm5qbk5GS79uTkZAUHBztcJjg4OE/9s4rigQMHtGbNmquee+rl5SUvL68CbAUAoDSxSm2iLgFA6VZijrR5enoqIiJC8fHxtrbMzEzFx8crKirK4TJRUVF2/SVp1apVdv2ziuKePXu0evVqVaxYsWg2AABQ6lCbAADFocQcaZOkUaNGqV+/fmrZsqVatWql6dOn68yZMxowYIAkqW/fvqpWrZri4uIkSY8//rjat2+vKVOmqHPnzpo/f75++eUXvfvuu5IuFcVu3bpp48aNWr58uTIyMmyfKQgICJCnp6dzNhQAUGJQmwAARa1EhbYePXro6NGjmjhxopKSktS8eXN99dVXtg90Hzx4UK6u/zt42Lp1a82bN0/PPPOMnn76adWtW1dLly5V48aNJUmHDx/WsmXLJEnNmze3W9fatWvVoUOHYtkuAEDJRW0CABS1EvU9bVbF9+EAgHOw/3WMeQEA57muv6cNAAAAAK5HhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFlag0Fa7dm39/fff2dpPnjyp2rVrX/OgAADIj6ZNm1KXAAClVoFC2/79+5WRkZGtPT09XYcPH77mQQEAkB8HDx6kLgEASi33/HRetmyZ7f9ff/21/Pz8bD9nZGQoPj5eoaGhhTY4AABys2LFCtv/qUsAgNLKxRhj8trZ1fXSgTkXFxdduZiHh4dCQ0M1ZcoU3XnnnYU7SotLS0uTn5+fUlNT5evr6+zhAMB1w9XVVcYY27+Xoy5RlwDAGYpiH5yvI22ZmZmSpFq1aunnn39WYGBgoQwCAICCOHnypPz8/FS9enUlJiZSlwAApVK+QluWffv2FfY4AAAosK1bt3JECQBQahUotElSfHy84uPjlZKSYjsCl+X999+/5oEBAJAf1CUAQGlVoND27LPP6rnnnlPLli1VpUoVubi4FPa4AADIs5dfflmvvPIKdQkAUCoVKLTNmjVLs2fPVp8+fQp7PAAA5Nv7779PXQIAlFoF+p628+fPq3Xr1oU9FgAACoS6BAAozQoU2h566CHNmzevsMcCAECB9O3bl7oEACi1CnR65Llz5/Tuu+9q9erVatq0qTw8POzunzp1aqEMDgCAvEhPT9fUqVOpSwCAUqlAoe3XX39V8+bNJUnbtm2zu48PfwMAitv27dupSwCAUqtAoW3t2rWFPQ4AAAps+fLlfE8bAKDUKtBn2pxp5syZCg0Nlbe3tyIjI7Vhw4Zc+y9YsEDh4eHy9vZWkyZNtGLFCrv7jTGaOHGiqlSpojJlyig6Olp79uwpyk0AAJQy1CYAQFEq0JG2jh075nq6yZo1awo8oNx8+umnGjVqlGbNmqXIyEhNnz5dMTEx2r17typXrpyt//r169WrVy/FxcXpzjvv1Lx589SlSxdt3LhRjRs3liS9+uqreuONNzRnzhzVqlVLEyZMUExMjHbs2CFvb+8i2Q4AQOG688475e6ec0krqrokUZsAAEXPxRhj8rvQyJEj7X6+cOGCNm/erG3btqlfv356/fXXC22Al4uMjNS//vUvzZgxQ5KUmZmpkJAQDR8+XGPHjs3Wv0ePHjpz5oyWL19ua7vxxhvVvHlzzZo1S8YYVa1aVaNHj9YTTzwhSUpNTVVQUJBmz56tnj175mlcaWlp8vPzU2pqKqfnAEAxytr/Pvroo/L09LS1F1ddkqxZm6hLAOA8RbEPLtCRtmnTpjlsnzRpkk6fPn1NA8rJ+fPnlZiYqHHjxtnaXF1dFR0drYSEBIfLJCQkaNSoUXZtMTExWrp0qSRp3759SkpKUnR0tO1+Pz8/RUZGKiEhIcfCmJ6ervT0dNvPaWlpBd0sAEAhiIuLc1gYi7IuSdapTdQlACjdCvUzbQ8++KDef//9wnxIm2PHjikjI0NBQUF27UFBQUpKSnK4TFJSUq79s/7Nz2NKl14c+Pn52W4hISH53h4AQNEryrokWac2UZcAoHQr1NCWkJBwXZxrP27cOKWmptpuhw4dcvaQAAAOUJcAAKVBgU6PvO++++x+NsboyJEj+uWXXzRhwoRCGdiVAgMD5ebmpuTkZLv25ORkBQcHO1wmODg41/5Z/yYnJ6tKlSp2fbK+78cRLy8veXl5FWQzAABFoHfv3nZfqF0cdUmyTm2iLgFA6VagI22Xn4Lh5+engIAAdejQQStWrFBsbGxhj1GS5OnpqYiICMXHx9vaMjMzFR8fr6ioKIfLREVF2fWXpFWrVtn616pVS8HBwXZ90tLS9NNPP+X4mAAA63FGXZKoTQCAYmJKkPnz5xsvLy8ze/Zss2PHDjNkyBDj7+9vkpKSjDHG9OnTx4wdO9bW/4cffjDu7u7mtddeMzt37jSxsbHGw8PDbN261dbn5ZdfNv7+/ubzzz83v/76q7nnnntMrVq1zD///JPncaWmphpJJjU1tfA2FgBwVVbY/1qxNllhXgDgelUU++ACnR6ZJTExUTt37pQkNWrUSDfccMM1h8jc9OjRQ0ePHtXEiROVlJSk5s2b66uvvrJ9WPvgwYNydf3fwcPWrVtr3rx5euaZZ/T000+rbt26Wrp0qe17cCTpySef1JkzZzRkyBCdPHlSbdu21VdffXVdfAYCAEqb4q5LErUJAFD0CvQ9bSkpKerZs6fWrVsnf39/SdLJkyfVsWNHzZ8/X5UqVSrscVoa34cDAM6Rtf/9/fffNXjwYOrS/0ddAgDnKYp9cIE+0zZ8+HCdOnVK27dv1/Hjx3X8+HFt27ZNaWlpeuyxxwplYAAA5NWYMWOoSwCAUqtAR9r8/Py0evVq/etf/7Jr37Bhg2699VadPHmysMZXIvCOJgA4R9b+19fXl7p0GeoSADiPZY60ZWZm2l1aOYuHh4cyMzOveVAAAOQHdQkAUJoVKLTdfPPNevzxx/XXX3/Z2g4fPqyRI0eqU6dOhTY4AADyol27dtQlAECpVaDQNmPGDKWlpSk0NFRhYWEKCwtTrVq1lJaWpjfffLOwxwgAQK4mT55MXQIAlFoFuuR/SEiINm7cqNWrV2vXrl2SpAYNGig6OrpQBwcAQF5Ur16dugQAKLXyFdrWrFmjYcOG6ccff5Svr69uueUW3XLLLZKk1NRUNWrUSLNmzdJNN91UJIMFAOBy33zzjaRLH/qmLgEASqt8nR45ffp0DR482OFVUPz8/PTvf/9bU6dOLbTBAQCQm7fffluSqEsAgFItX6Fty5Ytuu2223K8/9Zbb1ViYuI1DwoAgLzYtm1brvdTlwAApUG+QltycrLDSypncXd319GjR695UAAA5EVKSkqu91OXAAClQb5CW7Vq1XJ9V/PXX39VlSpVrnlQAADkxdVqDnUJAFAa5Cu03XHHHZowYYLOnTuX7b5//vlHsbGxuvPOOwttcAAA5ObWW2+VJOoSAKBUczHGmLx2Tk5OVosWLeTm5qZhw4apfv36kqRdu3Zp5syZysjI0MaNGxUUFFRkA7aitLQ0+fn5KTU11eGH4QEAReP3339X3bp1Vb16dQ0fPpy69P9RlwDAeYpiH5yvS/4HBQVp/fr1euSRRzRu3Dhl5T0XFxfFxMRo5syZ111hBAA4T+XKlSVd+k426hIAoLTK95dr16xZUytWrNCJEyf0+++/yxijunXrqkKFCkUxPgAArmrhwoXKyMigLgEASqV8h7YsFSpU0L/+9a/CHAsAAAVGXQIAlFb5uhAJAAAAAKB4EdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYSUmtB0/fly9e/eWr6+v/P39NWjQIJ0+fTrXZc6dO6ehQ4eqYsWKKleunLp27ark5GTb/Vu2bFGvXr0UEhKiMmXKqEGDBnr99deLelMAAKUEtQkAUBxKTGjr3bu3tm/frlWrVmn58uX69ttvNWTIkFyXGTlypP773/9qwYIF+uabb/TXX3/pvvvus92fmJioypUr66OPPtL27ds1fvx4jRs3TjNmzCjqzQEAlALUJgBAcXAxxhhnD+Jqdu7cqYYNG+rnn39Wy5YtJUlfffWV7rjjDv3555+qWrVqtmVSU1NVqVIlzZs3T926dZMk7dq1Sw0aNFBCQoJuvPFGh+saOnSodu7cqTVr1uR5fGlpafLz81Nqaqp8fX0LsIUAgIJw5v7XyrWJugQAzlMU++AScaQtISFB/v7+tqIoSdHR0XJ1ddVPP/3kcJnExERduHBB0dHRtrbw8HDVqFFDCQkJOa4rNTVVAQEBuY4nPT1daWlpdjcAwPXFSrWJugQApVuJCG1JSUmqXLmyXZu7u7sCAgKUlJSU4zKenp7y9/e3aw8KCspxmfXr1+vTTz+96qktcXFx8vPzs91CQkLyvjEAgFLBSrWJugQApZtTQ9vYsWPl4uKS623Xrl3FMpZt27bpnnvuUWxsrG699dZc+44bN06pqam226FDh4pljACAolcSaxN1CQBKN3dnrnz06NHq379/rn1q166t4OBgpaSk2LVfvHhRx48fV3BwsMPlgoODdf78eZ08edLuHc3k5ORsy+zYsUOdOnXSkCFD9Mwzz1x13F5eXvLy8rpqPwBAyVMSaxN1CQBKN6eGtkqVKqlSpUpX7RcVFaWTJ08qMTFRERERkqQ1a9YoMzNTkZGRDpeJiIiQh4eH4uPj1bVrV0nS7t27dfDgQUVFRdn6bd++XTfffLP69eunF198sRC2CgBQklGbAABWUyKuHilJt99+u5KTkzVr1ixduHBBAwYMUMuWLTVv3jxJ0uHDh9WpUyd9+OGHatWqlSTpkUce0YoVKzR79mz5+vpq+PDhki59PkC6dNrJzTffrJiYGE2ePNm2Ljc3tzwV7CxcpQsAnMPZ+1+r1iZnzwsAXM+KYh/s1CNt+fHxxx9r2LBh6tSpk1xdXdW1a1e98cYbtvsvXLig3bt36+zZs7a2adOm2fqmp6crJiZGb731lu3+hQsX6ujRo/roo4/00Ucf2dpr1qyp/fv3F8t2AQBKLmoTAKA4lJgjbVbGO5oA4Bzsfx1jXgDAea7b72kDAAAAgOsVoQ0AAAAALIzQBgAAAAAWRmgDAAAAAAsjtAEAAACAhRHaAAAAAMDCCG0AAAAAYGGENgAAAACwMEIbAAAAAFgYoQ0AAAAALIzQBgAAAAAWRmgDAAAAAAsjtAEAAACAhRHaAAAAAMDCCG0AAAAAYGGENgAAAACwMEIbAAAAAFgYoQ0AAAAALIzQBgAAAAAWRmgDAAAAAAsjtAEAAACAhRHaAAAAAMDCCG0AAAAAYGGENgAAAACwMEIbAAAAAFgYoQ0AAAAALIzQBgAAAAAWRmgDAAAAAAsjtAEAAACAhRHaAAAAAMDCCG0AAAAAYGGENgAAAACwMEIbAAAAAFgYoQ0AAAAALIzQBgAAAAAWRmgDAAAAAAsjtAEAAACAhRHaAAAAAMDCCG0AAAAAYGGENgAAAACwMEIbAAAAAFgYoQ0AAAAALIzQBgAAAAAWRmgDAAAAAAsjtAEAAACAhRHaAAAAAMDCCG0AAAAAYGGENgAAAACwMEIbAAAAAFgYoQ0AAAAALIzQBgAAAAAWRmgDAAAAAAsjtAEAAACAhRHaAAAAAMDCCG0AAAAAYGGENgAAAACwMEIbAAAAAFgYoQ0AAAAALIzQBgAAAAAWVmJC2/Hjx9W7d2/5+vrK399fgwYN0unTp3Nd5ty5cxo6dKgqVqyocuXKqWvXrkpOTnbY9++//1b16tXl4uKikydPFsEWAABKG2oTAKA4lJjQ1rt3b23fvl2rVq3S8uXL9e2332rIkCG5LjNy5Ej997//1YIFC/TNN9/or7/+0n333eew76BBg9S0adOiGDoAoJSiNgEAioUpAXbs2GEkmZ9//tnW9uWXXxoXFxdz+PBhh8ucPHnSeHh4mAULFtjadu7caSSZhIQEu75vvfWWad++vYmPjzeSzIkTJ/I1vtTUVCPJpKam5ms5AMC1ceb+18q1iboEAM5TFPvgEnGkLSEhQf7+/mrZsqWtLTo6Wq6urvrpp58cLpOYmKgLFy4oOjra1hYeHq4aNWooISHB1rZjxw4999xz+vDDD+XqmrfpSE9PV1pamt0NAHB9sVJtoi4BQOlWIkJbUlKSKleubNfm7u6ugIAAJSUl5biMp6en/P397dqDgoJsy6Snp6tXr16aPHmyatSokefxxMXFyc/Pz3YLCQnJ3wYBAEo8K9Um6hIAlG5ODW1jx46Vi4tLrrddu3YV2frHjRunBg0a6MEHH8z3cqmpqbbboUOHimiEAIDiVhJrE3UJAEo3d2eufPTo0erfv3+ufWrXrq3g4GClpKTYtV+8eFHHjx9XcHCww+WCg4N1/vx5nTx50u4dzeTkZNsya9as0datW7Vw4UJJkjFGkhQYGKjx48fr2WefdfjYXl5e8vLyyssmAgBKmJJYm6hLAFC6OTW0VapUSZUqVbpqv6ioKJ08eVKJiYmKiIiQdKmoZWZmKjIy0uEyERER8vDwUHx8vLp27SpJ2r17tw4ePKioqChJ0qJFi/TPP//Ylvn55581cOBAfffddwoLC7vWzQMAlEDUJgCA1Tg1tOVVgwYNdNttt2nw4MGaNWuWLly4oGHDhqlnz56qWrWqJOnw4cPq1KmTPvzwQ7Vq1Up+fn4aNGiQRo0apYCAAPn6+mr48OGKiorSjTfeKEnZit+xY8ds67vy8wYAAFyO2gQAKC4lIrRJ0scff6xhw4apU6dOcnV1VdeuXfXGG2/Y7r9w4YJ2796ts2fP2tqmTZtm65uenq6YmBi99dZbzhg+AKAUojYBAIqDi8k6WR4FlpaWJj8/P6WmpsrX19fZwwGA6wb7X8eYFwBwnqLYB5eIS/4DAAAAwPWK0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwghtAAAAAGBhhDYAAAAAsDBCGwAAAABYGKENAAAAACyM0AYAAAAAFkZoAwAAAAALI7QBAAAAgIUR2gAAAADAwtydPYDSwBgjSUpLS3PySADg+pK1383aD+MS6hIAOE9R1CZCWyH4+++/JUkhISFOHgkAXJ/+/vtv+fn5OXsYlkFdAgDnK8zaRGgrBAEBAZKkgwcP8qLhMmlpaQoJCdGhQ4fk6+vr7OFYBvOSM+bGMeYlZ6mpqapRo4ZtP4xLqEs54+/JMeYlZ8yNY8xLzoqiNhHaCoGr66WPBvr5+fGkdcDX15d5cYB5yRlz4xjzkrOs/TAuoS5dHX9PjjEvOWNuHGNeclaYtYkqBwAAAAAWRmgDAAAAAAsjtBUCLy8vxcbGysvLy9lDsRTmxTHmJWfMjWPMS86YG8eYl5wxN44xLzljbhxjXnJWFHPjYrhOMgAAAABYFkfaAAAAAMDCCG0AAAAAYGGENgAAAACwMEIbAAAAAFgYoS0PZs6cqdDQUHl7eysyMlIbNmzItf+CBQsUHh4ub29vNWnSRCtWrCimkRa//MzNf/7zH910002qUKGCKlSooOjo6KvOZUmV3+dMlvnz58vFxUVdunQp2gE6UX7n5uTJkxo6dKiqVKkiLy8v1atXr1T+TeV3XqZPn6769eurTJkyCgkJ0ciRI3Xu3LliGm3x+Pbbb3XXXXepatWqcnFx0dKlS6+6zLp169SiRQt5eXmpTp06mj17dpGP01moTTmjNjlGbXKMupQzalN2TqtNBrmaP3++8fT0NO+//77Zvn27GTx4sPH39zfJyckO+//www/Gzc3NvPrqq2bHjh3mmWeeMR4eHmbr1q3FPPKil9+5eeCBB8zMmTPNpk2bzM6dO03//v2Nn5+f+fPPP4t55EUrv/OSZd++faZatWrmpptuMvfcc0/xDLaY5Xdu0tPTTcuWLc0dd9xhvv/+e7Nv3z6zbt06s3nz5mIeedHK77x8/PHHxsvLy3z88cdm37595uuvvzZVqlQxI0eOLOaRF60VK1aY8ePHm8WLFxtJZsmSJbn2/+OPP0zZsmXNqFGjzI4dO8ybb75p3NzczFdffVU8Ay5G1KacUZscozY5Rl3KGbXJMWfVJkLbVbRq1coMHTrU9nNGRoapWrWqiYuLc9i/e/fupnPnznZtkZGR5t///neRjtMZ8js3V7p48aIpX768mTNnTlEN0SkKMi8XL140rVu3Nu+9957p169fqSyMxuR/bt5++21Tu3Ztc/78+eIaolPkd16GDh1qbr75Zru2UaNGmTZt2hTpOJ0pL4XxySefNI0aNbJr69Gjh4mJiSnCkTkHtSln1CbHqE2OUZdyRm26uuKsTZwemYvz588rMTFR0dHRtjZXV1dFR0crISHB4TIJCQl2/SUpJiYmx/4lVUHm5kpnz57VhQsXFBAQUFTDLHYFnZfnnntOlStX1qBBg4pjmE5RkLlZtmyZoqKiNHToUAUFBalx48Z66aWXlJGRUVzDLnIFmZfWrVsrMTHRdprKH3/8oRUrVuiOO+4oljFbFftfahO1yTFqk2PUpZxRmwpPYe1/3QtzUKXNsWPHlJGRoaCgILv2oKAg7dq1y+EySUlJDvsnJSUV2TidoSBzc6WnnnpKVatWzfZELskKMi/ff/+9/u///k+bN28uhhE6T0Hm5o8//tCaNWvUu3dvrVixQr///rseffRRXbhwQbGxscUx7CJXkHl54IEHdOzYMbVt21bGGF28eFEPP/ywnn766eIYsmXltP9NS0vTP//8ozJlyjhpZIWL2pQzapNj1CbHqEs5ozYVnsKqTRxpg1O8/PLLmj9/vpYsWSJvb29nD8dpTp06pT59+ug///mPAgMDnT0cy8nMzFTlypX17rvvKiIiQj169ND48eM1a9YsZw/NqdatW6eXXnpJb731ljZu3KjFixfriy++0PPPP+/soQElGrXpEmpTzqhLOaM2FS2OtOUiMDBQbm5uSk5OtmtPTk5WcHCww2WCg4Pz1b+kKsjcZHnttdf08ssva/Xq1WratGlRDrPY5Xde9u7dq/379+uuu+6ytWVmZkqS3N3dtXv3boWFhRXtoItJQZ4zVapUkYeHh9zc3GxtDRo0UFJSks6fPy9PT88iHXNxKMi8TJgwQX369NFDDz0kSWrSpInOnDmjIUOGaPz48XJ1vT7fj8tp/+vr61tqjrJJ1KbcUJscozY5Rl3KGbWp8BRWbbo+Zy+PPD09FRERofj4eFtbZmam4uPjFRUV5XCZqKgou/6StGrVqhz7l1QFmRtJevXVV/X888/rq6++UsuWLYtjqMUqv/MSHh6urVu3avPmzbbb3XffrY4dO2rz5s0KCQkpzuEXqYI8Z9q0aaPff//d9mJBkn777TdVqVKl1BTGgszL2bNnsxW/rBcQlz4XfX1i/0ttojY5Rm1yjLqUM2pT4Sm0/W++LltyHZo/f77x8vIys2fPNjt27DBDhgwx/v7+JikpyRhjTJ8+fczYsWNt/X/44Qfj7u5uXnvtNbNz504TGxtbqi+rnJ+5efnll42np6dZuHChOXLkiO126tQpZ21CkcjvvFyptF6hy5j8z83BgwdN+fLlzbBhw8zu3bvN8uXLTeXKlc0LL7zgrE0oEvmdl9jYWFO+fHnzySefmD/++MOsXLnShIWFme7duztrE4rEqVOnzKZNm8ymTZuMJDN16lSzadMmc+DAAWOMMWPHjjV9+vSx9c+6rPKYMWPMzp07zcyZM0v1Jf+pTY5RmxyjNjlGXcoZtckxZ9UmQlsevPnmm6ZGjRrG09PTtGrVyvz444+2+9q3b2/69etn1/+zzz4z9erVM56enqZRo0bmiy++KOYRF5/8zE3NmjWNpGy32NjY4h94Ecvvc+ZypbUwZsnv3Kxfv95ERkYaLy8vU7t2bfPiiy+aixcvFvOoi15+5uXChQtm0qRJJiwszHh7e5uQkBDz6KOPmhMnThT/wIvQ2rVrHe4zsuaiX79+pn379tmWad68ufH09DS1a9c2H3zwQbGPu7hQm3JGbXKM2uQYdSln1KbsnFWbXIy5jo9XAgAAAIDF8Zk2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2oAi5uLho6dKlee4/e/Zs+fv7F9l48mvp0qWqU6eO3NzcNGLECIdt+R1zaGiopk+fXiTjBQBcHbUpO2oTrM7FGGOcPQigpElKSlJcXJy++OIL/fnnn/Lz81OdOnX04IMPql+/fipbtqytX4UKFeTl5ZWnx/3nn3906tQpVa5cOdd+a9eu1eTJk/XTTz/pn3/+UWhoqG6//XaNGjVK1apVu+btyxIUFKQBAwboscceU/ny5VW+fPlsbe7u7nkac5ajR4/Kx8fHNkeFoUOHDmrevDkFF8B1jdpEbULpxZE2IJ/++OMP3XDDDVq5cqVeeuklbdq0SQkJCXryySe1fPlyrV692tY3ODg4z0VRksqUKXPVAvPOO+8oOjpawcHBWrRokXbs2KFZs2YpNTVVU6ZMKfB2Xen06dNKSUlRTEyMqlatqvLlyztsy8uYL1epUqVCLYoAAGoTtQmlngGQLzExMaZ69erm9OnTDu/PzMy0/V+SWbJkiTHGmH379hlJZtGiRaZDhw6mTJkypmnTpmb9+vW2/h988IHx8/PLcd2HDh0ynp6eZsSIEQ7vP3HihO3/CxcuNA0bNjSenp6mZs2a5rXXXrPre+7cOTN69GhTtWpVU7ZsWdOqVSuzdu1aY4wxa9euNZLsbjm1ORrzsmXLTMuWLY2Xl5epWLGi6dKli+2+mjVrmmnTptmNedCgQSYwMNCUL1/edOzY0WzevNl2f2xsrGnWrJn58MMPTc2aNY2vr6/p0aOHSUtLM8YY069fv2zj2rdvX45zCAClEbWJ2oTSjSNtQD78/fffWrlypYYOHSofHx+HfVxcXHJ9jPHjx+uJJ57Q5s2bVa9ePfXq1UsXL17M0/oXLFig8+fP68knn3R4f9b5+4mJierevbt69uyprVu3atKkSZowYYJmz55t6zts2DAlJCRo/vz5+vXXX3X//ffrtttu0549e9S6dWvt3r1bkrRo0SIdOXIkx7YrffHFF7r33nt1xx13aNOmTYqPj1erVq1y3Kb7779fKSkp+vLLL5WYmKgWLVqoU6dOOn78uK3P3r17tXTpUi1fvlzLly/XN998o5dfflmS9PrrrysqKkqDBw/WkSNHdOTIEYWEhORpPgGgNKA2UZtwHXB2agRKkh9//NFIMosXL7Zrr1ixovHx8TE+Pj7mySeftLXLwbuZ7733nu3+7du3G0lm586dxpirv5v5yCOPGF9f36uO84EHHjC33HKLXduYMWNMw4YNjTHGHDhwwLi5uZnDhw/b9enUqZMZN26cMebSu4z6/+9YZnHUduWYo6KiTO/evXMc2+XvZn733XfG19fXnDt3zq5PWFiYeeedd4wxl97NLFu2rO3dy6xtiYyMtP3cvn178/jjj+e4TgAozahN1CaUfhxpAwrBhg0btHnzZjVq1Ejp6em59m3atKnt/1WqVJEkpaSk5Gk9xpirvlsqSTt37lSbNm3s2tq0aaM9e/YoIyNDW7duVUZGhurVq6dy5crZbt9884327t2bp7HkZPPmzerUqVOe+m7ZskWnT59WxYoV7caxb98+u3GEhoaqfPnytp+rVKmS5zkDgOsVtel/qE0o6dydPQCgJKlTp45cXFxsp2JkqV27tqRLH9a+Gg8PD9v/s4pcZmZmntZfr149paam6siRI7aiWhCnT5+Wm5ubEhMT5ebmZndfuXLlCvy4Ut7m4PJxVKlSRevWrct23+WXar58zqRL85bXOQOA0o7adHXUJpR0HGkD8qFixYq65ZZbNGPGDJ05c6bY19+tWzd5enrq1VdfdXj/yZMnJUkNGjTQDz/8YHffDz/8oHr16snNzU033HCDMjIylJKSojp16tjdgoODr2mMTZs2VXx8fJ76tmjRQklJSXJ3d882jsDAwDyv09PTUxkZGQUdMgCUaNSmq6M2oaQjtAH59NZbb+nixYtq2bKlPv30U+3cuVO7d+/WRx99pF27dmV7d7AwhYSEaNq0aXr99dc1aNAgffPNNzpw4IB++OEH/fvf/9bzzz8vSRo9erTi4+P1/PPP67ffftOcOXM0Y8YMPfHEE5IuvSvau3dv9e3bV4sXL9a+ffu0YcMG2/f7XIvY2Fh98sknio2N1c6dO7V161a98sorDvtGR0crKipKXbp00cqVK7V//36tX79e48eP1y+//JLndYaGhuqnn37S/v37dezYMd7pBHDdoTbljtqEko7QBuRTWFiYNm3apOjoaI0bN07NmjVTy5Yt9eabb+qJJ56wFaei8uijj2rlypU6fPiw7r33XoWHh+uhhx6Sr6+vrfC1aNFCn332mebPn6/GjRtr4sSJeu6559S/f3/b43zwwQfq27evRo8erfr166tLly76+eefVaNGjWsaX4cOHbRgwQItW7ZMzZs3180336wNGzY47Ovi4qIVK1aoXbt2GjBggOrVq6eePXvqwIEDCgoKyvM6n3jiCbm5ualhw4aqVKmSDh48eE3bAAAlDbUpd9QmlHQuxhjj7EEAAAAAABzjSBsAAAAAWBihDQAAAAAsjNAGAAAAABZGaAMAAAAACyO0AQAAAICFEdoAAAAAwMIIbQAAAABgYYQ2AAAAALAwQhsAAAAAWBihDQAAAAAsjNAGAAAAABb2/wBLFkiufZkpWwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))\n",
    "\n",
    "ax1.hist(up_gini, bins=100)\n",
    "ax1.set_title(\"Upstream Dict Gini Coefficients\")\n",
    "ax1.set_xlabel(\"Gini Coefficient\")\n",
    "ax1.set_ylabel(\"Count\")\n",
    "ax1.set_xlim(0, 1)\n",
    "\n",
    "ax2.hist(rand_gini, bins=100)\n",
    "ax2.set_title(\"Random Gini Coefficients\")\n",
    "ax2.set_xlabel(\"Gini Coefficient\")\n",
    "ax2.set_ylabel(\"Count\")\n",
    "ax2.set_xlim(0, 1)\n",
    "\n",
    "plt.show()\n",
    "plt.close(fig)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAHeCAYAAACRyzqNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABzWElEQVR4nO3de3yP9eP/8ec2O5kdDNsIG0OOpSYzDCHLKcekj5xP1ZB8Ijo4S6RSIunTBxUfRXRwVgiZQw4lJDlEaVO0zSGbba/fH367vt72Hi7thMf9dnvfeF/X67qu13W9D689r+t1vd4uxhgjAAAAAMB1c83vCgAAAADAzYYgBQAAAAA2EaQAAAAAwCaCFAAAAADYRJACAAAAAJsIUgAAAABgE0EKAAAAAGwiSAEAAACATQQpAAAAALCJIAXkABcXF40ePTq/q3FVYWFh6tGjR46u88r9njNnjlxcXHT06NEc3U6jRo3UqFGjHF2nMz169FCRIkVyfTvIWbnx3kbuGT16tFxcXBymFeTXcP369XJxcdH69evzuyoAChiCFG45hw4dUv/+/VW+fHl5eXnJz89P9erV0xtvvKG///47v6uX4/bs2aOOHTsqNDRUXl5euuOOO/TAAw9o2rRp+V21XHPixAmNHj1au3fvzu+qXNOMGTM0Z86c/K7GTSkjI0MlSpTQ5MmT87squWbfvn0aPXp0jp98uB3k5/fAgQMH9PTTT6tu3bry8vLKlRNIdvz222/q1KmTAgIC5OfnpzZt2ujw4cPXvfzmzZtVv359FS5cWCEhIRo0aJDOnj2bpVxKSoqeffZZlSpVSt7e3oqMjNSaNWv+0ToPHjyozp07q3Tp0ipcuLAqV66ssWPH6vz589d/AIB8Uii/KwDkpGXLlunhhx+Wp6enunXrpurVqys1NVWbNm3S0KFDtXfvXs2aNSvHt/v333+rUKG8/zht3rxZ999/v8qWLau+ffsqJCREx48f15YtW/TGG29o4MCBVtkDBw7I1TVnz53k1X6vXr3a4fmJEyc0ZswYhYWFqWbNmrm+/X9ixowZKl68eIE9216Qbdu2TX/++adatmyZ31XJNfv27dOYMWPUqFEjhYWF5Xd18s2NfD/l5/dAXFyc3nzzTVWtWlVVqlTJ15M6Z8+e1f3336+kpCQ999xzcnd31+uvv66GDRtq9+7dKlas2FWX3717t5o0aaIqVarotdde06+//qopU6bo4MGDWrFihUPZHj16aNGiRRo8eLAqVqyoOXPmqEWLFlq3bp3q169ve53Hjx9X7dq15e/vrwEDBigwMFBxcXEaNWqUduzYoc8++yxnDxaQwwhSuGUcOXJEnTt3VmhoqNauXauSJUta82JjY/Xzzz9r2bJlubJtLy+vXFnvtUyYMEH+/v7avn27AgICHOadPHnS4bmnp2eObz+39/v8+fMqXLiwPDw8cnU7KJiWL1+u0NBQVatWLb+rUiAYY3ThwgV5e3vnd1VyXG58P+Wmhx56SImJifL19dWUKVPyNUjNmDFDBw8e1LZt23TfffdJkpo3b67q1avr1Vdf1UsvvXTV5Z977jkVLVpU69evl5+fn6RLXS379u2r1atXq1mzZpIundhYsGCBXnnlFT3zzDOSZJ2wHDZsmDZv3mx7nR988IESExO1adMm63Per18/ZWRk6P3339dff/2lokWL5uDRAnIWXftwy5g8ebLOnj2r9957zyFEZapQoYKeeuop63laWprGjRun8PBweXp6KiwsTM8995xSUlIclvv2228VExOj4sWLy9vbW+XKlVOvXr0cylx5r1DmPQA///yzevTooYCAAPn7+6tnz55Ouyt8+OGHioiIkLe3twIDA9W5c2cdP378mvt86NAhVatWLUuIkqSgoCCH51feg5B5P9OmTZs0aNAglShRQgEBAerfv79SU1OVmJiobt26qWjRoipatKiGDRsmY8xV99uZzz77TC1btlSpUqXk6emp8PBwjRs3Tunp6Q7lGjVqpOrVq2vHjh1q0KCBChcurOeee86al3mP1Pr1660/Fnr27CkXFxe5uLhozpw5GjVqlNzd3fXHH39kqUe/fv0UEBCgCxcuXLW+knT48GHFxMTIx8dHpUqV0tixY7Pse0ZGhqZOnapq1arJy8tLwcHB6t+/v/766y+rTFhYmPbu3auvv/7aqmejRo2UmJgoNzc3vfnmm1bZP//8U66uripWrJjDtp544gmFhIQ4bHvr1q168MEH5e/vr8KFC6thw4b65ptvsuzHb7/9pl69eik4OFienp6qVq2a/vvf/zqUybz/4+OPP9aECRNUunRpeXl5qUmTJvr555+veax69Ojh9EqKs/tgXFxcNGDAAM2bN0933nmnvLy8FBERoQ0bNjhd97Jl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oOKKFG4Z4eHhmj9/vh555BFVqVLF+qHA1NRUbd68WQsXLrR+p+Tuu+9W9+7dNWvWLKv72bZt2zR37ly1bdtW999/vyRp7ty5mjFjhtq1a6fw8HCdOXNG7777rvz8/HKk21F4eLjGjx+vESNG6OjRo2rbtq18fX115MgRLVmyRP369bN++NCZgQMH6vz582rXrp0qV65s7etHH32ksLCwfzxwwz9Vt25dFS1aVN27d9egQYPk4uKiDz744B93CQoPD1dAQIBmzpwpX19f+fj4KDIy0rqfxN3dXZ07d9Zbb70lNzc3Pfroo9e9bi8vL61cuVLdu3dXZGSkVqxYoWXLlum5556zrpg0bNhQ/fv318SJE7V79241a9ZM7u7uOnjwoBYuXKg33nhDHTt2lHQp/Lz99tsaP368KlSooKCgIDVu3FjS/90ndeDAAYcfzWzQoIFWrFghT09Ph9+GcXV11X/+8x81b95c1apVU8+ePXXHHXfot99+07p16+Tn56cvvvhC0qXhzNetW6fIyEj17dtXVatW1enTp7Vz5059+eWXOn369D94Bf5P586d9eyzz6pdu3YaNGiQzp8/r7fffluVKlVyOqBB9erVFRMT4zD8uSTrytuRI0e0f/9+vf322w7LZf5OU+aQ3C1atNCuXbu0YsUKFS9e3KHs8OHD9b///U/NmzfXoEGDFBgYqLlz5+rIkSP65JNPrK6S0qXBLwoVKqQDBw44/D5OgwYNrDrcaJDq06ePTp8+rcaNG6t06dL65ZdfNG3aNNWsWdO6El6zZk25ublp0qRJSkpKkqenpxo3bpzt/XeSNHToUH3++edq1aqVevTooYiICJ07d0579uzRokWLdPToURUvXlwtW7bUa6+9pgcffFD/+te/dPLkSU2fPl0VKlRwCL65ZcyYMVq5cqWio6P15JNPKi0tTdOmTVO1atWuuf2hQ4dq0aJFevjhh9WrVy9FRETo9OnT+vzzzzVz5kzdfffd2X4PfPfddxowYIAefvhhVapUSWlpafrggw+sEwyZRo8erTFjxmjdunXW79Rdr6SkJE2bNk2SrN9we+uttxQQEKCAgACHAWucyal7pKRL9+K9++67atmypZ555hm5u7vrtddeU3BwsDWAUqYqVapkuco1YcIE1a1bVw0bNlS/fv3066+/6tVXX1WzZs0c7ueLjIzUww8/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gCtSN+iLL75Q+fLlVbdu3esq36dPH82dO1cdO3bUv//9b23dulUTJ07U/v37tWTJEkmXzqI1a9ZMJUqU0PDhwxUQEKCjR49q8eLF17WNTp06qVy5cpo4caJ27typ//znPwoKCtKkSZOsMhMmTNCLL76oTp06qU+fPvrjjz80bdo0NWjQQLt27bpqd5/Q0FDFxcXphx9+uOGbIAcOHKiQkBCNGTNGW7Zs0axZsxQQEKDNmzerbNmyeumll7R8+XK98sorql69urp162Zr/XPmzFGRIkU0ZMgQFSlSRGvXrtXIkSOVnJysV155xaHsqVOn1Lx5c3Xu3FmPPfaYgoODs6yvSpUqGjt2rEaOHKl+/fopOjpaklS3bl3Vr19fY8eO1UcffaQBAwZYy6SmpmrRokXq0KFDtmct69evLxcXF23YsEF33XWXJGnjxo1ydXXVpk2brHJ//PGHfvzxR4f1S5e6t0VERDitcyZjjNq0aaNNmzbp8ccfV5UqVbRkyRJ17949S9kvv/xSzZs3V/ny5TV69Gj9/fffmjZtmurVq6edO3cqLCxM1atXV0BAgDZs2KCHHnrIoc7fffedkpOT5efnp4yMDG3evFn9+vVz2MbPP/+sjh07qnfv3urevbv++9//qkePHoqIiFC1atUkXfojbOLEierTp49q166t5ORkffvtt9q5c6ceeOAB9e/fXydOnNCaNWv0wQcfON3v2bNn68KFC+rXr588PT0VGBiovXv3ql69errjjjs0fPhw+fj46OOPP1bbtm31ySefqF27dpKkw4cP69NPP9XDDz+scuXKKSEhQe+8844aNmyoffv2qVSpUg7bmjhxory9vTV8+HD9/PPPmjZtmtzd3eXq6qq//vpLo0eP1pYtWzRnzhyVK1dOI0eOzPb1kqT33ntP/fv3V926dTV48GAdPnxYDz30kAIDA1WmTJmrLvv9998rOjpa7u7u6tevn8LCwnTo0CF98cUXmjBhgtq3b6+ffvpJ//vf//T666+rePHikqQSJUpcdb0o+GiPaI8Kent0o55//nn16dPHYdqHH36oVatWWYH5/PnzatiwoX777Tf1799fZcuW1ebNmzVixAj9/vvvmjp1qsPyztqI62kD89pff/2lFi1aqFOnTnr00Uf18ccf64knnpCHh4d1QiM5OVn/+c9/9Oijj6pv3746c+aM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+vXrp2eeeSbb5QcOHKjz58+rXbt2qly5srWvH330kcLCwv7xjbL/VN26dVW0aFF1795dgwYNkouLiz744IN/3J0qPDxcAQEBmjlzpnx9feXj46PIyEirn7W7u7s6d+6st956S25ubnr00Ueve93R0dGaN2+ew+AMbm5uqlu3rlatWqVGjRo59JtftmyZ6tevf83BBySpdevWqlevnoYPH66jR4+qatWqWrx4sdP7dF555RU1b95cUVFR6t27tzX0q7+/f5bfSomOjtaECRN0/Phxh8DUoEEDvfPOOwoLC8vS9eJ6Va1aVY0aNVJERIQCAwP17bffatGiRQ5nPDMbkEGDBikmJkZubm7q3LnzVdc7ffp01a9fXzVq1FDfvn1Vvnx5JSQkKC4uTr/++qv1O1GtWrXS2LFj1bNnT9WtW1d79uzRvHnzrnmPUk5wd3fX+PHj1b9/fzVu3FiPPPKIjhw5otmzZ1/X9t98803Vr19f9957r/r166dy5crp6NGjWrZsmXbv3i3p/47d888/r86dO8vd3V2tW7fOl7OtyDm0R7RHBb09ulGZr2ODBg304YcfOsyrW7euypcvr6FDh+rzzz9Xq1atrKG1z507pz179mjRokU6evToNXsU2GkDr9f48eMlXbpXTpI++OADazj5F1544ZrLlypVSpMmTdLRo0dVqVIlffTRR9q9e7dmzZplDXLUqlUrLV68WO3atVPLli115MgRzZw5U1WrVtXZs2etdfXp00enT59W48aNVbp0af3yyy+aNm2aatasaV2ZzonjeCPya7s5Ji+GBryV/fTTT6Zv374mLCzMeHh4GF9fX1OvXj0zbdo0h+FNL168aMaMGWPKlStn3N3dTZkyZcyIESMcyuzcudM8+uijpmzZssbT09MEBQWZVq1amW+//dZhm8pmuNk//vjDoZyz4SiNMeaTTz4x9evXNz4+PsbHx8dUrlzZxMbGmgMHDlx1X1esWGF69eplKleubIoUKWI8PDxMhQoVzMCBA01CQoJD2eyGm71yKN3s6t69e3fj4+Nz1f12tn/ffPONqVOnjvH29jalSpWyhsTVFUOPNmzY0FSrVs3pfl453Kwxxnz22WematWqplChQk6HOd22bZuRZJo1a+Z0ndnZu3evkWSqVKniMH38+PFGknnxxRetaRkZGSYoKMhhOPNrOXXqlOna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HJZLSEiw5oWEhOjkyZMO89PS0nT69GmrzJU8PT3l5+fn8AAA4Eovv/yyXFxcNHjwYGvahQsXFBsbq2LFiqlIkSLq0KFDlnbq2LFjatmypQoXLqygoCANHTpUaWlpeVx7AEBBkeNB6vz583J1dVytm5ubMjIyJEnlypVTSEiIvvrqK2t+cnKytm7dqqioKElSVFSUEhMTtWPHDqvM2rVrlZGRocjIyJyuMgDgNrF9+3a98847uuuuuxymP/300/riiy+0cOFCff311zpx4oTat29vzU9PT1fLli2VmpqqzZs3a+7cuZozZ45GjhyZ17sAACggcjxItW7dWhMmTNCyZct09OhRLVmyRK+99pratWsnSdZZwPHjx+vzzz/Xnj171K1bN5UqVUpt27aVJFWpUkUPPvig+vbtq23btumbb77RgAED1LlzZ0bsAwDckLNnz6pLly569913VbRoUWt6UlKS3nvvPb322mtq3LixIiIiNHv2bG3evFlbtmyRJK1evVr79u3Thx9+qJo1a6p58+YaN26cpk+frtTU1PzaJQBAPsrxIDVt2jR17NhRTz75pKpUqaJnnnlG/fv317hx46wyw4YN08CBA9WvXz/dd999Onv2rFauXCkvLy+rzLx581S5cmU1adJELVq0UP369TVr1qycri4A4DYRGxurli1bOowaK0k7duzQxYsXHaZXrlxZZcuWdRhNtkaNGg4DJcXExCg5OVl79+7NdpuMKAsAt64cH7XP19dXU6dO1dSpU7Mt4+LiorFjx2rs2LHZlgkMDNT8+fNzunoAgNvQggULtHPnTm3fvj3LvPj4eHl4eCggIMBh+pWjyTobbTZzXnYYURYAbl05fkUKAICC5Pjx43rqqac0b948h54PeYERZQHg1nXbB6mw4csUNnxZflcDAJBLduzYoZMnT+ree+9VoUKFVKhQIX399dd68803VahQIQUHBys1NVWJiYkOy105mqyz0WYz52WHEWUB4NZ12wcpAMCtrUmTJtqzZ492795tPWrVqqUuXbpY/3d3d3cYTfbAgQM6duyYw2iye/bscfhpjjVr1sjPz09Vq1bN830CAOS/HL9HCgCAgsTX11fVq1d3mObj46NixYpZ03v37q0hQ4YoMDBQfn5+GjhwoKKiolSnTh1JUrNmzVS1alV17dpVkydPVnx8vF544QXFxsbK09Mzz/cJAJD/CFIAgNve66+/LldXV3Xo0EEpKSmKiYnRjBkzrPlubm5aunSpnnjiCUVFRcnHx0fdu3e/6qBJAIBbG0EKAHDbWb9+vcNzLy8vTZ8+XdOnT892mdDQUC1fvjyXawYAuFlwjxQAAAAA2ESQAgAAAACbCFIAAAAAYBNBCgAAAABsIkgBAAAAgE0EKQAAAACwiSAFAAAAADYRpAAAAADAJoIUAAAAANhEkAIAAAAAmwhSAAAAAGATQQoAAAAAbCJIAQAAAIBNBCkAAAAAsIkgBQAAAAA2EaQAAAAAwCaCFAAAAADYRJACAAAAAJsIUgAAAABgE0Hq/wsbvkxhw5fldzUAAAAA3AQIUgAAAABgE0EKAAAAAGwiSAEAAACATQQpAAAAALCJIAUAQAGUOQASAyEBQMFEkAIAAAAAmwhSAAAAAGATQQoAAAAAbCJIAQAAAIBNBCkAAAAAsIkgBQAAAAA2EaQAACigGPocAAoughQAAAAA2ESQAgAAAACbCFIAAAAAYBNBCgAAAABsIkgBAAAAgE0EKQAAAACwiSAFAAAAADYRpAAAAADAJoIUAAAAANhEkAIAAAAAmwhSAAAAAGATQQoAAAAAbCJIAQAAAIBNBCkAAAAAsIkgBQAAAAA2EaQAAAAAwCaCFAAAAADYRJACAAAAAJsIUgAAAABgE0EKAAAAAGwiSAEAAACATQQpAAAAALApV4LUb7/9pscee0zFihWTt7e3atSooW+//daab4zRyJEjVbJkSXl7e6tp06Y6ePCgwzpOnz6tLl26yM/PTwEBAerdu7fOnj2bG9UFAAAAAFtyPEj99ddfqlevntzd3bVixQrt27dPr776qooWLWqVmTx5st58803NnDlTW7dulY+Pj2JiYnThwgWrTJcuXbR3716tWbNGS5cu1YYNG9SvX7+cri4AAAAA2FYop1c4adIklSlTRrNnz7amlStXzvq/MUZTp07VCy+8oDZt2kiS3n//fQUHB+vTTz9V586dtX//fq1cuVLbt29XrVq1JEnTpk1TixYtNGXKFJUqVSrLdlNSUpSSkmI9T05OzuldAwAAAABJuXBF6vPPP1etWrX08MMPKygoSPfcc4/effdda/6RI0cUHx+vpk2bWtP8/f0VGRmpuLg4SVJcXJwCAgKsECVJTZs2laurq7Zu3ep0uxMnTpS/v7/1KFOmTE7vGgAAAABIyoUgdfjwYb399tuqWLGiVq1apSeeeEKDBg3S3LlzJUnx8fGSpODgYIflgoODrXnx8fEKCgpymF+oUCEFBgZaZa40YsQIJSUlWY/jx4/n9K4BAG5Sb7/9tu666y75+fnJz89PUVFRWrFihTX/woULio2NVbFixVSkSBF16NBBCQkJDus4duyYWrZsqcKFCysoKEhDhw5VWlpaXu8KAKCAyPEglZGRoXvvvVcvvfSS7rnnHvXr1099+/bVzJkzc3pTDjw9Pa0GMvMBAIAklS5dWi+//LJ27Nihb7/9Vo0bN1abNm20d+9eSdLTTz+tL774QgsXLtTXX3+tEydOqH379tby6enpatmypVJTU7V582bNnTtXc+bM0ciRI/Ok/mHDl+XJdgAA1y/Hg1TJkiVVtWpVh2lVqlTRsWPHJEkhISGSlOVMX0JCgjUvJCREJ0+edJiflpam06dPW2UAALherVu3VosWLVSxYkVVqlRJEyZMUJEiRbRlyxYlJSXpvffe02uvvabGjRsrIiJCs2fP1ubNm7VlyxZJ0urVq7Vv3z59+OGHqlmzppo3b65x48Zp+vTpSk1Nzee9AwDkhxwPUvXq1dOBAwccpv30008KDQ2VdGngiZCQEH311VfW/OTkZG3dulVRUVGSpKioKCUmJmrHjh1WmbVr1yojI0ORkZE5XWUAwG0kPT1dCxYs0Llz5xQVFaUdO3bo4sWLDvfuVq5cWWXLlnW4d7dGjRoO3dJjYmKUnJxsXdVyJiUlRcnJyQ6PG8VVKQAoWHI8SD399NPasmWLXnrpJf3888+aP3++Zs2apdjYWEmSi4uLBg8erPHjx+vzzz/Xnj171K1bN5UqVUpt27aVdOkK1oMPPqi+fftq27Zt+uabbzRgwAB17tzZ6Yh9uSFs+DIaLQC4hezZs0dFihSRp6enHn/8cS1ZskRVq1ZVfHy8PDw8FBAQ4FD+ynt3nd3bmzkvOwyEBAC3rhwPUvfdd5+WLFmi//3vf6pevbrGjRunqVOnqkuXLlaZYcOGaeDAgerXr5/uu+8+nT17VitXrpSXl5dVZt68eapcubKaNGmiFi1aqH79+po1a1ZOVxcAcJu48847tXv3bm3dulVPPPGEunfvrn379uXqNhkICQBuXTn+O1KS1KpVK7Vq1Srb+S4uLho7dqzGjh2bbZnAwEDNnz8/N6p3VVyFAoBbk4eHhypUqCBJioiI0Pbt2/XGG2/okUceUWpqqhITEx2uSl157+62bdsc1pd5r+/V7t319PSUp6dnDu8JAKAgyPErUgAA3AwyMjKUkpKiiIgIubu7O9y7e+DAAR07dszh3t09e/Y4DIS0Zs0a+fn5ZRlgCQBwe8iVK1IAABQkI0aMUPPmzVW2bFmdOXNG8+fP1/r167Vq1Sr5+/urd+/eGjJkiAIDA+Xn56eBAwcqKipKderUkSQ1a9ZMVatWVdeuXTV58mTFx8frhRdeUGxsLFecAOA2RZACANzyTp48qW7duun333+Xv7+/7rrrLq1atUoPPPCAJOn111+Xq6urOnTooJSUFMXExGjGjBnW8m5ublq6dKmeeOIJRUVFycfHR927d79qF3UAwK2NIAUAuOW99957V53v5eWl6dOna/r06dmWCQ0N1fLly3O6agCAmxT3SAEAAACATQQpAAAAALCJIAUAAAAANhGkAAAAAMAmghQAAAAA2ESQAgAAAACbCFIAAAAAYBNBCgAAAABsIkgBAAAAgE0EKQAAAACwiSAFAAAAADYRpAAAAADAJoIUAAAAANhEkAIAAAAAmwhSAADcRMKGL8vvKgAARJACAAAAANsIUgAAAABgE0EKAAAAAGwiSAEAAACATQQpAAAAALCJIAUAAAAANhGkAAAAAMAmghQAAAAA2ESQAgAAAACbCFIAAAAAYBNBCgAAAABsIkgBAAAAgE0EKQAAAACwiSAFAAAAADYRpAAAuEmEDV+W31UAAPx/BCkAAAAAsIkgBQAAAAA2EaSuIWz4MrpSAAAAAHBAkAIAAAAAmwhSAAAAAGATQQoAgJsMXc4BIP8RpAAAAADAJoIUAAAAANhEkAIA4CZFFz8AyD8EKQAAAACwiSAFAAAAADYRpAAAAADAJoIUAAAAANhEkAIAAAAAmwhSAAAAAGATQQoAAAAAbCJIAQAAAIBNBCkAAAAAsIkgBQAAAAA2EaQAAAAAwCaCFAAAAADYRJACAAAAAJsIUgAAAABgE0EKAAAAAGwiSAEAAACATbkepF5++WW5uLho8ODB1rQLFy4oNjZWxYoVU5EiRdShQwclJCQ4LHfs2DG1bNlShQsXVlBQkIYOHaq0tLTcri4AAAAAXFOuBqnt27frnXfe0V133eUw/emnn9YXX3yhhQsX6uuvv9aJEyfUvn17a356erpatmyp1NRUbd68WXPnztWcOXM0cuTI3KwuAAAAAFyXXAtSZ8+eVZcuXfTuu++qaNGi1vSkpCS99957eu2119S4cWNFRERo9uzZ2rx5s7Zs2SJJWr16tfbt26cPP/xQNWvWVPPmzTVu3DhNnz5dqampuVXlqwobvkxhw5fly7YBAAAAFCy5FqRiY2PVsmVLNW3a1GH6jh07dPHiRYfplStXVtmyZRUXFydJiouLU40aNRQcHGyViYmJUXJysvbu3et0eykpKUpOTnZ4AAAgSRMnTtR9990nX19fBQUFqW3btjpw4IBDGbqdAwDsyJUgtWDBAu3cuVMTJ07MMi8+Pl4eHh4KCAhwmB4cHKz4+HirzOUhKnN+5jxnJk6cKH9/f+tRpkyZHNgTAMCt4Ouvv1ZsbKy2bNmiNWvW6OLFi2rWrJnOnTtnlaHbOQDAjkI5vcLjx4/rqaee0po1a+Tl5ZXTq8/WiBEjNGTIEOt5cnIyYQoAIElauXKlw/M5c+YoKChIO3bsUIMGDaxu5/Pnz1fjxo0lSbNnz1aVKlW0ZcsW1alTx+p2/uWXXyo4OFg1a9bUuHHj9Oyzz2r06NHy8PDI032iuzkA5K8cvyK1Y8cOnTx5Uvfee68KFSqkQoUK6euvv9abb76pQoUKKTg4WKmpqUpMTHRYLiEhQSEhIZKkkJCQLN0pMp9nlrmSp6en/Pz8HB4AADiTlJQkSQoMDJREt3MAgH05HqSaNGmiPXv2aPfu3dajVq1a6tKli/V/d3d3ffXVV9YyBw4c0LFjxxQVFSVJioqK0p49e3Ty5EmrzJo1a+Tn56eqVavmdJUBALeRjIwMDR48WPXq1VP16tUl0e0cAGBfjnft8/X1tRqmTD4+PipWrJg1vXfv3hoyZIgCAwPl5+engQMHKioqSnXq1JEkNWvWTFWrVlXXrl01efJkxcfH64UXXlBsbKw8PT1zusoAgNtIbGysfvjhB23atCnXt0W3cwC4deV4kLoer7/+ulxdXdWhQwelpKQoJiZGM2bMsOa7ublp6dKleuKJJxQVFSUfHx91795dY8eOzY/qAgBuEQMGDNDSpUu1YcMGlS5d2poeEhJidTu//KrUld3Ot23b5rC+6+l2zglAALg15UmQWr9+vcNzLy8vTZ8+XdOnT892mdDQUC1fvjyXawYAuB0YYzRw4EAtWbJE69evV7ly5RzmR0REWN3OO3ToIMl5t/MJEybo5MmTCgoKkkS3cwC4neXLFSkAAPJSbGys5s+fr88++0y+vr7WPU3+/v7y9vaWv78/3c4BALYQpAAAt7y3335bktSoUSOH6bNnz1aPHj0k0e0cAGAPQQoAcMszxlyzDN3OAQB25Pjw5wAAAABwqyNIAQAAAIBNBCkAAAAAsIkgBQAAAAA2EaQAAAAAwCaCFAAAAADYRJACAAAAAJsIUgAAAABgE0EKAICbXNjwZfldBQC47RCkAAAAAMAmghQAADexzKtRXJUCgLxFkAIAAAAAmwhSAAAAAGATQcomuk4AAAAAIEgBAAAAgE0EKQAAAACwiSAFAAAAADYRpAAAAADAJoIUAAAAANhEkAIA4BbByLIAkHcIUgAAAABgE0EKAAAAAGwiSAEAAACATQQpAAAAALCJIAUAAAAANhGkAAC4hTByHwDkDYIUAAAAANhEkAIAAAAAmwhSAAAAAGATQQoAAAAAbCJIAQAAAIBNBCkAAAAAsIkgBQAAAAA2EaQAAAAAwCaCFAAAAADYRJACAAAAAJsIUgAAAABgE0EKAAAAAGwiSAEAAACATQSpGxA2fJnChi/L72oAAAAAyCcEKQAAAACwiSAFAAAAADYRpAAAAADAJoIUAAAAANhEkAIAAAAAmwhSAADcYhhZFgByH0EKAAAAAGwiSAEAAACATQQpAAAAALCJIAUAAAAANhGkAAAAAMAmghQAAAAA2ESQ+gfChi9jiFkAAADgNkSQAgDgFsSJPgDIXQQpAAAAALCJIAUAAAAANhGkAAAAAMCmHA9SEydO1H333SdfX18FBQWpbdu2OnDggEOZCxcuKDY2VsWKFVORIkXUoUMHJSQkOJQ5duyYWrZsqcKFCysoKEhDhw5VWlpaTlcXAAAAAGzL8SD19ddfKzY2Vlu2bNGaNWt08eJFNWvWTOfOnbPKPP300/riiy+0cOFCff311zpx4oTat29vzU9PT1fLli2VmpqqzZs3a+7cuZozZ45GjhyZ09UFANwGNmzYoNatW6tUqVJycXHRp59+6jDfGKORI0eqZMmS8vb2VtOmTXXw4EGHMqdPn1aXLl3k5+engIAA9e7dW2fPns3DvQAAFCQ5HqRWrlypHj16qFq1arr77rs1Z84cHTt2TDt27JAkJSUl6b333tNrr72mxo0bKyIiQrNnz9bmzZu1ZcsWSdLq1au1b98+ffjhh6pZs6aaN2+ucePGafr06UpNTc3pKgMAbnHnzp3T3XffrenTpzudP3nyZL355puaOXOmtm7dKh8fH8XExOjChQtWmS5dumjv3r1as2aNli5dqg0bNqhfv355tQsAgAIm1++RSkpKkiQFBgZKknbs2KGLFy+qadOmVpnKlSurbNmyiouLkyTFxcWpRo0aCg4OtsrExMQoOTlZe/fudbqdlJQUJScnOzwAAJCk5s2ba/z48WrXrl2WecYYTZ06VS+88ILatGmju+66S++//75OnDhhXbnav3+/Vq5cqf/85z+KjIxU/fr1NW3aNC1YsEAnTpzI470BABQEuRqkMjIyNHjwYNWrV0/Vq1eXJMXHx8vDw0MBAQEOZYODgxUfH2+VuTxEZc7PnOfMxIkT5e/vbz3KlCmTw3sDALgVHTlyRPHx8Q4n+Pz9/RUZGelwgi8gIEC1atWyyjRt2lSurq7aunVrtuvO75N8/JYUAOSeXA1SsbGx+uGHH7RgwYLc3IwkacSIEUpKSrIex48fz/VtAgBufpkn6JydwLv8BF9QUJDD/EKFCikwMDDbE3wSJ/kA4FaWa0FqwIABWrp0qdatW6fSpUtb00NCQpSamqrExESH8gkJCQoJCbHKXDmKX+bzzDJX8vT0lJ+fn8MDAID8xEk+ALh15XiQMsZowIABWrJkidauXaty5co5zI+IiJC7u7u++uora9qBAwd07NgxRUVFSZKioqK0Z88enTx50iqzZs0a+fn5qWrVqjldZQDAbSzzBJ2zE3iXn+C7vE2SpLS0NJ0+fTrbE3wSJ/kA4FaW40EqNjZWH374oebPny9fX1/Fx8crPj5ef//9t6RL/c579+6tIUOGaN26ddqxY4d69uypqKgo1alTR5LUrFkzVa1aVV27dtV3332nVatW6YUXXlBsbKw8PT1zusoAgNtYuXLlFBIS4nCCLzk5WVu3bnU4wZeYmGiNQCtJa9euVUZGhiIjI/O8zgCA/Fcop1f49ttvS5IaNWrkMH327Nnq0aOHJOn111+Xq6urOnTooJSUFMXExGjGjBlWWTc3Ny1dulRPPPGEoqKi5OPjo+7du2vs2LE5XV0AwG3g7Nmz+vnnn63nR44c0e7duxUYGKiyZctq8ODBGj9+vCpWrKhy5crpxRdfVKlSpdS2bVtJUpUqVfTggw+qb9++mjlzpi5evKgBAwaoc+fOKlWqVD7tFQAgP+V4kDLGXLOMl5eXpk+fnu3veUhSaGioli9fnpNVAwDcpr799lvdf//91vMhQ4ZIkrp37645c+Zo2LBhOnfunPr166fExETVr19fK1eulJeXl7XMvHnzNGDAADVp0sQ6Gfjmm2/m+b4AAAqGHA9SAAAUNI0aNbrqiT4XFxeNHTv2qj0fAgMDNX/+/NyoHgDgJpTrP8gLAAAAALcaghQAAAAA2ESQAgAAAACbCFI5IGz4MoUNX5bf1QAAAACQRwhSAAAAAGATQQoAgFsYPSYAIHcQpAAAAADAJoIUAAAAANhEkAIA4DZAFz8AyFkEKQAAAACwiSAFAAAAADYRpHIQvycFAAAA3B4IUgAAAABgE0EKAAAAAGwiSAEAcIuj2zkA5DyCFAAAAADYRJACAAAAAJsIUgAAAABgE0EqFzAMOgCgoKJ9AoCcQZACAOA2QYgCgJxDkAIAAAAAmwhSAAAAAGATQQoAAAAAbCJIAQAAAIBNBCkAAG5DDDwBAP8MQSoXMQw6AAAAcGsiSAEAAACATQQpAAAAALCJIAUAAAAANhGkAAAAAMAmghQAALcZBkICgH+OIAUAAAAANhGkAAAAAMAmghQAAAAA2ESQAgAAAACbCFJ5IGz4Mm7sBQAAAG4hBCkAAG5TnOQDgBtHkAIAAAAAmwhSAADc5rgyBQD2EaQAAAAAwCaCFAAAtzGuRgHAjSFI5SFG7wMAAABuDQQpAADAiT4AsIkgBQAAAAA2EaQAAAAAwCaCVD6g+wQAAABwcyNIAQAAAIBNBCkAAAAAsIkgBQAALJndz+mGDgBXR5ACAAAAAJsIUgAAwCmuSgFA9ghSAADAAQEKAK6NIJVPwoYvo6ECANw0aLMAwBFBKp8RqAAABYWz9og2CgCcI0gBAICrujxMEawA4JJC+V0BXHJlw3T05Zb5VBMAAAAA18IVKQAAcF2uPOnH1SkAtzOCVAGVee8U91ABAAqa7Lr60V4BuJ0QpAAAQI4hTAG4XRToIDV9+nSFhYXJy8tLkZGR2rZtW35XKd9wZQoACgbapqyup3263jaMtg7AzaLABqmPPvpIQ4YM0ahRo7Rz507dfffdiomJ0cmTJ/O7agCA2xRt0/+51v1Sl58AzC4cEZoA3MwK7Kh9r732mvr27auePXtKkmbOnKlly5bpv//9r4YPH56lfEpKilJSUqznSUlJkqSMlPN5U+E8kpycnO286qNWOZ3+w5gYh/mZzwEgN2R+Txlj8rkmOY+26fqUfXqh9f/k5GRrfy+f/sOYGGWknFdycrKqj1pltU0ZKedV9umFV22rLi9/+f+dzQcAKZfaJlMApaSkGDc3N7NkyRKH6d26dTMPPfSQ02VGjRplJPHgwYMHjwLyOHToUB60GHmHtokHDx48bv5HTrZNBfKK1J9//qn09HQFBwc7TA8ODtaPP/7odJkRI0ZoyJAh1vPExESFhobq2LFj8vf3z9X63kySk5NVpkwZHT9+XH5+fvldnQKFY+McxyV7HBvnkpKSVLZsWQUGBuZ3VXIUbVPu4bPkHMclexwb5zgu2cuNtqlABqkb4enpKU9PzyzT/f39eSM54efnx3HJBsfGOY5L9jg2zrm6FtjbcPMMbZM9fJac47hkj2PjHMcleznZNhXIVq548eJyc3NTQkKCw/SEhASFhITkU60AALcz2iYAwOUKZJDy8PBQRESEvvrqK2taRkaGvvrqK0VFReVjzQAAtyvaJgDA5Qps174hQ4aoe/fuqlWrlmrXrq2pU6fq3Llz1khJ1+Lp6alRo0Y57VJxO+O4ZI9j4xzHJXscG+du5eNC25Q7OC7OcVyyx7FxjuOSvdw4Ni7GFNzxad966y298sorio+PV82aNfXmm28qMjIyv6sFALiN0TYBAKQCHqQAAAAAoCAqkPdIAQAAAEBBRpACAAAAAJsIUgAAAABgE0EKAAAAAGy6qYPU9OnTFRYWJi8vL0VGRmrbtm1XLb9w4UJVrlxZXl5eqlGjhpYvX55HNc1bdo7Lu+++q+joaBUtWlRFixZV06ZNr3kcb2Z23zOZFixYIBcXF7Vt2zZ3K5hP7B6XxMRExcbGqmTJkvL09FSlSpX4PP1/U6dO1Z133ilvb2+VKVNGTz/9tC5cuJBHtc0bGzZsUOvWrVWqVCm5uLjo008/veYy69ev17333itPT09VqFBBc+bMyfV65hfaJudom5yjXcoebZNztEtZ5Vu7ZG5SCxYsMB4eHua///2v2bt3r+nbt68JCAgwCQkJTst/8803xs3NzUyePNns27fPvPDCC8bd3d3s2bMnj2ueu+wel3/9619m+vTpZteuXWb//v2mR48ext/f3/z66695XPPcZ/fYZDpy5Ii54447THR0tGnTpk3eVDYP2T0uKSkpplatWqZFixZm06ZN5siRI2b9+vVm9+7deVzz3Gf32MybN894enqaefPmmSNHjphVq1aZkiVLmqeffjqPa567li9fbp5//nmzePFiI8ksWbLkquUPHz5sChcubIYMGWL27dtnpk2bZtzc3MzKlSvzpsJ5iLbJOdom52iXskfb5BztknP51S7dtEGqdu3aJjY21nqenp5uSpUqZSZOnOi0fKdOnUzLli0dpkVGRpr+/fvnaj3zmt3jcqW0tDTj6+tr5s6dm1tVzDc3cmzS0tJM3bp1zX/+8x/TvXv3W7LBsntc3n77bVO+fHmTmpqaV1XMN3aPTWxsrGncuLHDtCFDhph69erlaj3z0/U0WMOGDTPVqlVzmPbII4+YmJiYXKxZ/qBtco62yTnapezRNjlHu3Rtedku3ZRd+1JTU7Vjxw41bdrUmubq6qqmTZsqLi7O6TJxcXEO5SUpJiYm2/I3oxs5Llc6f/68Ll68qMDAwNyqZr640WMzduxYBQUFqXfv3nlRzTx3I8fl888/V1RUlGJjYxUcHKzq1avrpZdeUnp6el5VO0/cyLGpW7euduzYYXWzOHz4sJYvX64WLVrkSZ0Lqtvh+1eibcoObZNztEvZo21yjnYp5+TUd2+hnKxUXvnzzz+Vnp6u4OBgh+nBwcH68ccfnS4THx/vtHx8fHyu1TOv3chxudKzzz6rUqVKZXlz3exu5Nhs2rRJ7733nnbv3p0HNcwfN3JcDh8+rLVr16pLly5avny5fv75Zz355JO6ePGiRo0alRfVzhM3cmz+9a9/6c8//1T9+vVljFFaWpoef/xxPffcc3lR5QIru+/f5ORk/f333/L29s6nmuUs2ibnaJuco13KHm2Tc7RLOSen2qWb8ooUcsfLL7+sBQsWaMmSJfLy8srv6uSrM2fOqGvXrnr33XdVvHjx/K5OgZKRkaGgoCDNmjVLEREReuSRR/T8889r5syZ+V21fLd+/Xq99NJLmjFjhnbu3KnFixdr2bJlGjduXH5XDbhp0TZdQrt0dbRNztEu5a6b8opU8eLF5ebmpoSEBIfpCQkJCgkJcbpMSEiIrfI3oxs5LpmmTJmil19+WV9++aXuuuuu3KxmvrB7bA4dOqSjR4+qdevW1rSMjAxJUqFChXTgwAGFh4fnbqXzwI28Z0qWLCl3d3e5ublZ06pUqaL4+HilpqbKw8MjV+ucV27k2Lz44ovq2rWr+vTpI0mqUaOGzp07p379+un555+Xq+vtee4qu+9fPz+/W+ZqlETblB3aJudol7JH2+Qc7VLOyal26aY8eh4eHoqIiNBXX31lTcvIyNBXX32lqKgop8tERUU5lJekNWvWZFv+ZnQjx0WSJk+erHHjxmnlypWqVatWXlQ1z9k9NpUrV9aePXu0e/du6/HQQw/p/vvv1+7du1WmTJm8rH6uuZH3TL169fTzzz9bDbgk/fTTTypZsuQt0VBlupFjc/78+SyNUmajfun+19vT7fD9K9E2ZYe2yTnapezRNjlHu5Rzcuy719bQFAXIggULjKenp5kzZ47Zt2+f6devnwkICDDx8fHGGGO6du1qhg8fbpX/5ptvTKFChcyUKVPM/v37zahRo27ZIWbtHJeXX37ZeHh4mEWLFpnff//depw5cya/diHX2D02V7pVR0eye1yOHTtmfH19zYABA8yBAwfM0qVLTVBQkBk/fnx+7UKusXtsRo0aZXx9fc3//vc/c/jwYbN69WoTHh5uOnXqlF+7kCvOnDljdu3aZXbt2mUkmddee83s2rXL/PLLL8YYY4YPH266du1qlc8cZnbo0KFm//79Zvr06bf08Oe0TVnRNjlHu5Q92ibnaJecy6926aYNUsYYM23aNFO2bFnj4eFhateubbZs2WLNa9iwoenevbtD+Y8//thUqlTJeHh4mGrVqplly5blcY3zhp3jEhoaaiRleYwaNSrvK54H7L5nLncrN1h2j8vmzZtNZGSk8fT0NOXLlzcTJkwwaWlpeVzrvGHn2Fy8eNGMHj3ahIeHGy8vL1OmTBnz5JNPmr/++ivvK56L1q1b5/R7I/NYdO/e3TRs2DDLMjVr1jQeHh6mfPnyZvbs2Xle77xC2+QcbZNztEvZo21yjnYpq/xql1yMuY2v6wEAAADADbgp75ECAAAAgPxEkAIAAAAAmwhSAAAAAGATQQoAAAAAbCJIAQAAAIBNBCkAAAAAsIkgBQAAAAA2EaQAAAAAwCaCFAAAAADYRJACAAAAAJsIUgAAAABg0/8DLhqcvyNktE4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))\n",
    "\n",
    "fig.suptitle(f\"Cosine Similarity between up/downstream dicts, l1 = {target_l1}\")\n",
    "\n",
    "sample_size = 10000\n",
    "\n",
    "sample_idxs = np.random.choice(len(cosine_sim.flatten()), size=sample_size, replace=False)\n",
    "\n",
    "ax1.hist(cosine_sim.flatten()[sample_idxs], bins=100)\n",
    "ax1.set_title(\"Cosine Similarity w/ downstream dict\")\n",
    "ax1.set_xlim(0, 1)\n",
    "\n",
    "ax2.hist(baseline_cosine_sim.flatten()[sample_idxs], bins=100)\n",
    "ax2.set_title(\"Cosine Similarity w/ ~zero l1 baseline\")\n",
    "ax2.set_xlim(0, 1)\n",
    "\n",
    "plt.show()\n",
    "plt.close(fig)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "upstream_activation_data = torch.load(\"activation_data/layer_2/0.pt\").to(\"cuda:0\", dtype=torch.float32)\n",
    "downstream_activation_data = torch.load(\"activation_data/layer_3/0.pt\").to(\"cuda:0\", dtype=torch.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from autoencoders.learned_dict import RandomDict\n",
    "\n",
    "upstream_zero_l1_baseline = RandomDict(activation_size=512, n_feats=512)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "RuntimeError",
     "evalue": "CUDA error: device-side assert triggered\nCUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.\nFor debugging consider passing CUDA_LAUNCH_BLOCKING=1.\nCompile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.\n",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[51], line 3\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[39m# iteratively build covariance matrixes for encodings\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m covariance \u001b[39m=\u001b[39m torch\u001b[39m.\u001b[39;49mzeros(upstream_feats\u001b[39m.\u001b[39;49mshape[\u001b[39m0\u001b[39;49m], downstream_feats\u001b[39m.\u001b[39;49mshape[\u001b[39m0\u001b[39;49m], device\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mcuda:0\u001b[39;49m\u001b[39m\"\u001b[39;49m)\n\u001b[1;32m      4\u001b[0m covariance_to_baseline \u001b[39m=\u001b[39m torch\u001b[39m.\u001b[39mzeros(upstream_zero_l1_baseline\u001b[39m.\u001b[39mn_dict_components(), downstream_feats\u001b[39m.\u001b[39mshape[\u001b[39m0\u001b[39m], device\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mcuda:0\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m      6\u001b[0m means_upstream \u001b[39m=\u001b[39m torch\u001b[39m.\u001b[39mzeros(upstream_feats\u001b[39m.\u001b[39mshape[\u001b[39m0\u001b[39m], device\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mcuda:0\u001b[39m\u001b[39m\"\u001b[39m)\n",
      "\u001b[0;31mRuntimeError\u001b[0m: CUDA error: device-side assert triggered\nCUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.\nFor debugging consider passing CUDA_LAUNCH_BLOCKING=1.\nCompile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.\n"
     ]
    }
   ],
   "source": [
    "# iteratively build covariance matrixes for encodings\n",
    "\n",
    "covariance = torch.zeros(upstream_feats.shape[0], downstream_feats.shape[0], device=\"cuda:0\")\n",
    "covariance_to_baseline = torch.zeros(upstream_zero_l1_baseline.n_dict_components(), downstream_feats.shape[0], device=\"cuda:0\")\n",
    "\n",
    "means_upstream = torch.zeros(upstream_feats.shape[0], device=\"cuda:0\")\n",
    "means_downstream = torch.zeros(downstream_feats.shape[0], device=\"cuda:0\")\n",
    "means_baseline = torch.zeros(upstream_zero_l1_baseline.n_dict_components(), device=\"cuda:0\")\n",
    "\n",
    "var_upstream = torch.zeros(upstream_feats.shape[0], device=\"cuda:0\")\n",
    "var_downstream = torch.zeros(downstream_feats.shape[0], device=\"cuda:0\")\n",
    "var_baseline = torch.zeros(upstream_zero_l1_baseline.n_dict_components(), device=\"cuda:0\")\n",
    "\n",
    "batch_size = 100000\n",
    "\n",
    "upstream_dict.to_device(\"cuda:0\")\n",
    "downstream_dict.to_device(\"cuda:0\")\n",
    "upstream_zero_l1_baseline.to_device(\"cuda:0\")\n",
    "\n",
    "for i in tqdm.tqdm(range(0, upstream_activation_data.shape[0], batch_size)):\n",
    "    j = min(i+batch_size, upstream_activation_data.shape[0])\n",
    "    upstream_batch = upstream_activation_data[i:j]\n",
    "    downstream_batch = downstream_activation_data[i:j]\n",
    "\n",
    "    upstream_codes = upstream_dict.encode(upstream_batch)\n",
    "    baseline_codes = upstream_zero_l1_baseline.encode(upstream_batch)\n",
    "\n",
    "    downstream_codes = downstream_dict.encode(downstream_batch)\n",
    "\n",
    "    means_upstream = (i / j) * means_upstream + ((j - i) / j) * upstream_codes.sum(dim=0)\n",
    "    means_downstream = (i / j) * means_downstream + ((j - i) / j) * downstream_codes.sum(dim=0)\n",
    "    means_baseline = (i / j) * means_baseline + ((j - i) / j) * baseline_codes.sum(dim=0)\n",
    "\n",
    "    var_upstream = (i / j) * var_upstream + ((j - i) / j) * (upstream_codes - means_upstream).pow(2).sum(dim=0)\n",
    "    var_downstream = (i / j) * var_downstream + ((j - i) / j) * (downstream_codes - means_downstream).pow(2).sum(dim=0)\n",
    "    var_baseline = (i / j) * var_baseline + ((j - i) / j) * (baseline_codes - means_baseline).pow(2).sum(dim=0)\n",
    "\n",
    "    covariance *= (i / j)\n",
    "    covariance += ((j - i) / j) * ((upstream_codes - means_upstream).T @ (downstream_codes - means_downstream))\n",
    "\n",
    "    covariance_to_baseline *= (i / j)\n",
    "    covariance_to_baseline += ((j - i) / j) * ((baseline_codes - means_baseline).T @ (downstream_codes - means_downstream))\n",
    "\n",
    "correlations = covariance / torch.sqrt(torch.outer(var_upstream, var_downstream))\n",
    "correlations_to_baseline = covariance_to_baseline / torch.sqrt(torch.outer(var_baseline, var_downstream))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████| 2048/2048 [00:20<00:00, 100.69it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████| 2048/2048 [00:15<00:00, 133.27it/s]\n"
     ]
    }
   ],
   "source": [
    "up_gini = []\n",
    "for f_idx in tqdm.tqdm(range(covariance.shape[0])):\n",
    "    if (covariance[f_idx] == 0).all():\n",
    "        continue\n",
    "    up_gini.append(gini(np.abs(covariance[f_idx].cpu().numpy())))\n",
    "    continue\n",
    "\n",
    "base_gini = []\n",
    "for f_idx in tqdm.tqdm(range(covariance_to_baseline.shape[0])):\n",
    "    if (covariance_to_baseline[f_idx] == 0).all():\n",
    "        continue\n",
    "    base_gini.append(gini(np.abs(covariance_to_baseline[f_idx].cpu().numpy())))\n",
    "    continue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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x44dTenSpU2VKlXMJ598kuv7lWXt2rVGkhkwYMBl62aJj483t9xyiyldurTx8fExd9xxh9mxY4c1f/bs2UaS+fbbb7MtO2XKFCPJbNu2zRhjzNatW01kZKSpXr268fT0NAEBAeahhx4yf/zxh8Nyl9rPOR2vPvjgA9OxY0dTsWJF4+HhYerXr299Ni5UtWpVEx4ebr777jtz0003GU9PT1O9enUzY8aMbHUv9303xpjTp0+bkSNHmpo1a1rv5fDhwx0+08YYs2TJEtO2bVvj4+NjvLy8TJ06dUxMTMzldj2AXGT1mRs2bHAoz8zMNN7e3ubBBx+0yl599VUTEhJi/Pz8TMmSJU3z5s3N7Nmzs60zL9/TvH7nL/4fIquPurBfzepHt2/fbjp06GBKlSplgoKCzCuvvJIttrxuFyjqit3PqgsWLFCtWrXUunXrq17X999/rzlz5ujf//63ypYtq7feeksRERE6dOiQypcvn+f1nDp1SvHx8WrXrp2qVKly2frGGN1xxx1asWKF+vfvr2bNmumbb77R8OHDdeTIEU2YMMGq++KLL+q5557Tvffeq0ceeUS///67Jk6cqHbt2mnz5s3y9fXVG2+8oQ8//FBz587V5MmTVaZMGTVp0kS1atXSu+++q/Xr1+v999+XJN188805xnTixAndeuut2rlzpx5++GE1b95cf/zxh+bPn69ff/1VFSpUyHG57du3q23btrrhhhv0zDPPyMvLS5999pl69OihL774QnfddZdD/cGDB6tcuXIaNWqUDhw4oDfeeEPR0dH69NNPJUlvvPGGBg8erDJlylgjGwEBAVe1LytWrKiPPvpIL774ok6cOGGdnli/fv3Lvlc5cXNzU+/evfXcc8/p+++/V3h4uCTpkUce0YwZM3T33XfriSee0Lp16xQbG6udO3dq7ty5kqRbb71VEyZM0Pbt29WoUSNJ0nfffSdXV1d99913evzxx60ySWrXrp3Dtl9++WW5urrqySefVGpqqsaNG6c+ffpo3bp1kqQzZ84oLCxM6enpGjx4sAIDA3XkyBEtWLBAKSkp8vHx0UcffaRHHnlErVq10sCBAyVJNWvWdNjOPffco9q1a+ull16S+eds6bx8FiVp9uzZOnXqlAYNGqTy5ctr/fr1mjhxon799VfNnj3bYTsZGRnq1q2b2rVrp3HjxumTTz5RdHS0vLy89Oyzz6pPnz7q2bOnpkyZogcffFAhISGqXr16ru/N/PnzJUl9+/bN03u5bNkydevWTTVq1NDo0aP1999/a+LEiWrbtq1++OEHVatWTeHh4SpTpow+++wztW/f3mH5Tz/9VA0bNrTey6VLl+qXX37RQw89pMDAQG3fvl3vvvuutm/frrVr12Y7HTqn/ZyTyZMnq2HDhrrjjjtUokQJffXVV/r3v/+tzMxMRUVFOdTdu3ev7r77bvXv31+RkZH64IMP1K9fP7Vo0UINGzaUlLfve2Zmpu644w59//33GjhwoOrXr69t27ZpwoQJ+vnnn61rFLdv367bb79dTZo00dixY+Xp6am9e/dq9erVeXoPAOQuNTVVf/zxh4wxSk5O1sSJE3XixAmHsznefPNN3XHHHerTp4/OnDmjWbNm6Z577tGCBQus/ikv39O8fuevxF9//aWuXbuqZ8+euvfee/X555/r6aefVuPGjdWtW7drtl3ANramhYUsNTXVSDI9evTINu+vv/4yv//+uzVd+Ot8biNmHh4eZu/evVbZ1q1bjSQzceJEqywvI2ZZy/3nP//JUzvmzZtnJJkXXnjBofzuu+82Li4uVkwHDhwwbm5u5sUXX3Sot23bNlOiRAmH8qw2XvhrtzH/PypxsYt/7Ro5cqSRZObMmZOt7sUjTxeOmHXu3Nk0btzY4VetzMxMc/PNN5vatWtbZVn7MTQ01GG0aOjQocbNzc1h5Klhw4aXHSXLktd9acylR8Eudrm6c+fOdRjl2rJli5FkHnnkEYd6Tz75pJFkli9fbowxJjk52WEkLCUlxbi6upp77rnHBAQEWMs9/vjjDiNrWb9G1q9f36Snp1v13nzzTYcRm82bNxtJOf5aeiEvL69sI6bG/P/nqHfv3g7lV/JZvHhkzBhjYmNjjYuLi8OIcmRkpJFkXnrpJavsr7/+MqVKlTIuLi5m1qxZVvmuXbuskeBLueuuu4wk89dff12yXpZmzZoZf39/8+eff1plW7duNa6urg6/SPfu3dv4+/ubc+fOWWVHjx41rq6uZuzYsZds+//+9z8jyaxatcoqy20/XzjvQjmtNywszNSoUcOhLGvE+cJtJScnG09PT/PEE09YZXn5vn/00UfG1dXVfPfddw7zs0YJV69ebYwxZsKECTkeewDkX1afefHk6elppk+f7lD34uPDmTNnTKNGjUynTp2ssrx8T/P6nTcm7yNmksyHH35olaWnp5vAwEATERGRr+0CRV2xusIyLS1N0vkbF1ysQ4cOqlixojXFxcVddn2hoaEOIwVNmjSRt7e3fvnll3zFdeF1ZZeyaNEiubm5WaMjWZ544gkZY6w7Ls2ZM0eZmZm699579ccff1hTYGCgateurRUrVlxRnJfyxRdfqGnTptlGuCTletOTY8eOafny5br33nt1/PhxK74///xTYWFh2rNnj44cOeKwzMCBAx3Wd+uttyojI0MHDx7MV9x53ZcFLeszePz4cSsOSRo2bFi2OCRp4cKFkqSKFSuqXr16WrVqlSRp9erVcnNz0/Dhw5WUlKQ9e/ZIOj9idsstt2Tb9w899JDD9YK33nqrJFmfWR8fH0nSN998o1OnTuW7fY899pjD6yv5LJYqVcr6++TJk/rjjz908803yxijzZs3Z9vWI488Yv3t6+urunXrysvLS/fee69VXrduXfn6+l72u3kl38WjR49qy5Yt6tevn/z8/KzyJk2a6F//+pf1nkrSfffdp+TkZIcb0nz++efKzMzUfffdl2PbT58+rT/++ENt2rSRJP3www/ZYrh4P+fmwvVm/YLevn17/fLLL0pNTXWo26BBA+tzIZ3/zNWtW9dh3+Xl+z579mzVr19f9erVc3jPO3XqJEnWe541Uvrll18qMzMzT+0BkDdxcXFaunSpli5dqo8//lgdO3bUI488ojlz5lh1Ljw+/PXXX0pNTdWtt97qcMzJy/c0r9/5K1GmTBmH0T0PDw+1atXK4Xh0LbYL2KVYJWZZ/2ydOHEi27x33nnHOnDlVU6nHZYrV05//fXXFcXl7e0t6f//Sb+cgwcPKigoKNs/j1mn1mUlKXv27JExRrVr13ZIOitWrKidO3daN/woCPv27bNOx8qrvXv3yhij5557Llt8o0aNkqRsMV68z8uVKydJV7zPs+R1Xxa0rM9g1nYPHjwoV1dXhztiSlJgYKB8fX0d4rj11lutUxW/++47tWzZUi1btpSfn5++++47paWlaevWrQ7/XGe53P6rXr26hg0bpvfff18VKlRQWFiY4uLisv3zfjkXny54JZ/FQ4cOWclOmTJlVLFiResUwIvjKFmypCpWrOhQ5uPjo8qVK2dLSn18fC77ObmS72LWe1K3bt1s8+rXr68/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8UZJ0rBhw3TjjTdq5MiRcnNz048//qg77rhDderUUf/+/dWiRQt999138vT0tNbxySefqF69eurcubNuu+023XLLLXr33XftahIAAAAAXDFbR8w6dOggY0yu87/55pvLrsPPz08zZ84syLAAAAAAoFA51TVmAAAAAHA9IjEDAAAAAJuRmAEAAACAzUjMAAAAAMBmJGYAAAAAYDMSMwAAAACwGYkZAAAXOHLkiB544AGVL19epUqVUuPGjbVx40ZrvjFGI0eOVKVKlVSqVCmFhoZqz549Dus4duyY+vTpI29vb/n6+qp///46ceJEYTcFAOBESMwAAPjHX3/9pbZt28rd3V1ff/21duzYoddff13lypWz6owbN05vvfWWpkyZonXr1snLy0thYWE6ffq0VadPnz7avn27li5dqgULFmjVqlUaOHCgHU0CADgJWx8wDQBAUfLKK68oODhY06ZNs8qqV69u/W2M0RtvvKERI0bozjvvlCR9+OGHCggI0Lx589SrVy/t3LlTixcv1oYNG9SyZUtJ0sSJE3XbbbfptddeU1BQUOE2CgDgFBgxAwDgH/Pnz1fLli11zz33yN/fXzfeeKPee+89a/7+/fuVmJio0NBQq8zHx0etW7dWQkKCJCkhIUG+vr5WUiZJoaGhcnV11bp163Lcbnp6utLS0hwmAEDxQmIGAMA/fvnlF02ePFm1a9fWN998o0GDBunxxx/XjBkzJEmJiYmSpICAAIflAgICrHmJiYny9/d3mF+iRAn5+flZdS4WGxsrHx8fawoODi7opgEAijgSMwAA/pGZmanmzZvrpZde0o033qiBAwdqwIABmjJlyjXdbkxMjFJTU63p8OHD13R7AICih8QMAIB/VKpUSQ0aNHAoq1+/vg4dOiRJCgwMlCQlJSU51ElKSrLmBQYGKjk52WH+uXPndOzYMavOxTw9PeXt7e0wAQCKFxIzAAD+0bZtW+3evduh7Oeff1bVqlUlnb8RSGBgoOLj4635aWlpWrdunUJCQiRJISEhSklJ0aZNm6w6y5cvV2Zmplq3bl0IrQAAOCPuyggAwD+GDh2qm2++WS+99JLuvfderV+/Xu+++67effddSZKLi4uGDBmiF154QbVr11b16tX13HPPKSgoSD169JB0foSta9eu1imQZ8+eVXR0tHr16sUdGQEAuSIxAwDgHzfd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",
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))\n",
    "ax1.hist(up_gini, bins=100)\n",
    "ax1.set_title(\"Gini Coefficient of Downstream Covariances\")\n",
    "ax1.set_xlabel(\"Gini Coefficient\")\n",
    "ax1.set_ylabel(\"Count\")\n",
    "\n",
    "ax2.hist(base_gini, bins=100)\n",
    "ax2.set_title(\"Baseline\")\n",
    "ax2.set_xlabel(\"Gini Coefficient\")\n",
    "ax2.set_ylabel(\"Count\")\n",
    "\n",
    "plt.show()\n",
    "plt.close(fig)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "RuntimeError",
     "evalue": "CUDA error: device-side assert triggered\nCUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.\nFor debugging consider passing CUDA_LAUNCH_BLOCKING=1.\nCompile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.\n",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[50], line 6\u001b[0m\n\u001b[1;32m      2\u001b[0m sample_idxs \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39mrandom\u001b[39m.\u001b[39mchoice(correlations\u001b[39m.\u001b[39mflatten()\u001b[39m.\u001b[39mshape[\u001b[39m0\u001b[39m], size\u001b[39m=\u001b[39mn_samples, replace\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n\u001b[1;32m      4\u001b[0m fig, (ax1, ax2) \u001b[39m=\u001b[39m plt\u001b[39m.\u001b[39msubplots(\u001b[39m1\u001b[39m, \u001b[39m2\u001b[39m, figsize\u001b[39m=\u001b[39m(\u001b[39m10\u001b[39m, \u001b[39m5\u001b[39m))\n\u001b[0;32m----> 6\u001b[0m ax1\u001b[39m.\u001b[39mhist(correlations\u001b[39m.\u001b[39;49mflatten()[sample_idxs]\u001b[39m.\u001b[39mcpu()\u001b[39m.\u001b[39mnumpy(), bins\u001b[39m=\u001b[39m\u001b[39m100\u001b[39m)\n\u001b[1;32m      7\u001b[0m ax1\u001b[39m.\u001b[39mset_title(\u001b[39m\"\u001b[39m\u001b[39mCorrelation to dict\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m      8\u001b[0m ax1\u001b[39m.\u001b[39mset_xlabel(\u001b[39m\"\u001b[39m\u001b[39mCorrelation\u001b[39m\u001b[39m\"\u001b[39m)\n",
      "\u001b[0;31mRuntimeError\u001b[0m: CUDA error: device-side assert triggered\nCUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.\nFor debugging consider passing CUDA_LAUNCH_BLOCKING=1.\nCompile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0UAAAGyCAYAAAArj289AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAhFklEQVR4nO3db2yd5Xn48ct28DGo2IRlsZPMNIOO0hZIaEI8QxGi8moJlC4vpnpQJVnEn9FmiMbaSkIgLqWNMwYoUjGNSGH0RVnSIkBVE5lRr1FF8RQ1iSU6EhANNFlVm2QddmZam9jP70WF+zM5hhw7Pk58fz7SeZGH5/G5fcucS1+f43NKsizLAgAAIFGlU70AAACAqSSKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKQVHEU//elPY+nSpTF37twoKSmJ55577kOv2bVrV3z605+OXC4XH/vYx+LJJ58cx1IB4ETmEgATVXAU9ff3x4IFC6Ktre2kzn/jjTfihhtuiOuuuy66urriK1/5Stxyyy3x/PPPF7xYAHg/cwmAiSrJsiwb98UlJfHss8/GsmXLxjznrrvuih07dsQvfvGLkWN/+7d/G2+//Xa0t7eP964B4ATmEgDjMWOy76CzszMaGhpGHWtsbIyvfOUrY14zMDAQAwMDI/8eHh6O3/72t/Enf/InUVJSMllLBeB9siyLY8eOxdy5c6O0dHr8Gaq5BHBmm4zZNOlR1N3dHdXV1aOOVVdXR19fX/zud7+Ls88++4RrWltb47777pvspQFwkg4fPhx/9md/NtXLOCXMJYDp4VTOpkmPovFYt25dNDc3j/y7t7c3Lrjggjh8+HBUVlZO4coA0tLX1xe1tbVx7rnnTvVSppS5BHD6mIzZNOlRVFNTEz09PaOO9fT0RGVlZd7fxkVE5HK5yOVyJxyvrKw0fACmwHR6iZi5BDA9nMrZNOkvEK+vr4+Ojo5Rx1544YWor6+f7LsGgBOYSwC8X8FR9H//93/R1dUVXV1dEfGHtzbt6uqKQ4cORcQfXmKwYsWKkfNvv/32OHjwYHz1q1+NAwcOxKOPPhrf//73Y82aNafmOwAgaeYSABNVcBT9/Oc/jyuuuCKuuOKKiIhobm6OK664IjZs2BAREb/5zW9GBlFExJ//+Z/Hjh074oUXXogFCxbEQw89FN/5zneisbHxFH0LAKTMXAJgoib0OUXF0tfXF1VVVdHb2+u12wBF5PE3P/sCMHUm4zF4enzoBAAAwDiJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaeOKora2tpg/f35UVFREXV1d7N69+wPP37x5c3z84x+Ps88+O2pra2PNmjXx+9//flwLBoB8zCYAxqvgKNq+fXs0NzdHS0tL7N27NxYsWBCNjY3x1ltv5T3/qaeeirVr10ZLS0vs378/Hn/88di+fXvcfffdE148AESYTQBMTMFR9PDDD8ett94aq1atik9+8pOxZcuWOOecc+KJJ57Ie/5LL70UV199ddx0000xf/78+NznPhc33njjh/4GDwBOltkEwEQUFEWDg4OxZ8+eaGho+OMXKC2NhoaG6OzszHvNVVddFXv27BkZNAcPHoydO3fG9ddfP+b9DAwMRF9f36gbAORTjNlkLgFMbzMKOfno0aMxNDQU1dXVo45XV1fHgQMH8l5z0003xdGjR+Mzn/lMZFkWx48fj9tvv/0DX6LQ2toa9913XyFLAyBRxZhN5hLA9Dbp7z63a9eu2LhxYzz66KOxd+/eeOaZZ2LHjh1x//33j3nNunXrore3d+R2+PDhyV4mAAkpdDaZSwDTW0HPFM2aNSvKysqip6dn1PGenp6oqanJe829994by5cvj1tuuSUiIi677LLo7++P2267LdavXx+lpSd2WS6Xi1wuV8jSAEhUMWaTuQQwvRX0TFF5eXksWrQoOjo6Ro4NDw9HR0dH1NfX573mnXfeOWG4lJWVRURElmWFrhcARjGbAJiogp4piohobm6OlStXxuLFi2PJkiWxefPm6O/vj1WrVkVExIoVK2LevHnR2toaERFLly6Nhx9+OK644oqoq6uL119/Pe69995YunTpyAACgIkwmwCYiIKjqKmpKY4cORIbNmyI7u7uWLhwYbS3t4/8geuhQ4dG/fbtnnvuiZKSkrjnnnvi17/+dfzpn/5pLF26NL75zW+euu8CgKSZTQBMREl2BrxOoK+vL6qqqqK3tzcqKyunejkAyfD4m599AZg6k/EYPOnvPgcAAHA6E0UAAEDSRBEAAJA0UQQAACRNFAEAAEkTRQAAQNJEEQAAkDRRBAAAJE0UAQAASRNFAABA0kQRAACQNFEEAAAkTRQBAABJE0UAAEDSRBEAAJA0UQQAACRNFAEAAEkTRQAAQNJEEQAAkDRRBAAAJE0UAQAASRNFAABA0kQRAACQNFEEAAAkTRQBAABJE0UAAEDSRBEAAJA0UQQAACRNFAEAAEkTRQAAQNJEEQAAkDRRBAAAJE0UAQAASRNFAABA0kQRAACQNFEEAAAkTRQBAABJE0UAAEDSRBEAAJA0UQQAACRNFAEAAEkTRQAAQNJEEQAAkDRRBAAAJE0UAQAASRNFAABA0kQRAACQNFEEAAAkTRQBAABJE0UAAEDSRBEAAJA0UQQAACRNFAEAAEkTRQAAQNJEEQAAkDRRBAAAJE0UAQAASRNFAABA0kQRAACQNFEEAAAkTRQBAABJE0UAAEDSRBEAAJA0UQQAACRNFAEAAEkTRQAAQNLGFUVtbW0xf/78qKioiLq6uti9e/cHnv/222/H6tWrY86cOZHL5eLiiy+OnTt3jmvBAJCP2QTAeM0o9ILt27dHc3NzbNmyJerq6mLz5s3R2NgYr776asyePfuE8wcHB+Ov/uqvYvbs2fH000/HvHnz4le/+lWcd955p2L9AGA2ATAhJVmWZYVcUFdXF1deeWU88sgjERExPDwctbW1cccdd8TatWtPOH/Lli3xL//yL3HgwIE466yzxrXIvr6+qKqqit7e3qisrBzX1wCgcGfK42+xZ9OZsi8A09FkPAYX9PK5wcHB2LNnTzQ0NPzxC5SWRkNDQ3R2dua95oc//GHU19fH6tWro7q6Oi699NLYuHFjDA0NjXk/AwMD0dfXN+oGAPkUYzaZSwDTW0FRdPTo0RgaGorq6upRx6urq6O7uzvvNQcPHoynn346hoaGYufOnXHvvffGQw89FN/4xjfGvJ/W1taoqqoaudXW1hayTAASUozZZC4BTG+T/u5zw8PDMXv27Hjsscdi0aJF0dTUFOvXr48tW7aMec26deuit7d35Hb48OHJXiYACSl0NplLANNbQW+0MGvWrCgrK4uenp5Rx3t6eqKmpibvNXPmzImzzjorysrKRo594hOfiO7u7hgcHIzy8vITrsnlcpHL5QpZGgCJKsZsMpcApreCnikqLy+PRYsWRUdHx8ix4eHh6OjoiPr6+rzXXH311fH666/H8PDwyLHXXnst5syZkzeIAKAQZhMAE1Xwy+eam5tj69at8d3vfjf2798fX/rSl6K/vz9WrVoVERErVqyIdevWjZz/pS99KX7729/GnXfeGa+99lrs2LEjNm7cGKtXrz513wUASTObAJiIgj+nqKmpKY4cORIbNmyI7u7uWLhwYbS3t4/8geuhQ4eitPSPrVVbWxvPP/98rFmzJi6//PKYN29e3HnnnXHXXXeduu8CgKSZTQBMRMGfUzQVfB4EwNTw+JuffQGYOlP+OUUAAADTjSgCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJImigAAgKSJIgAAIGmiCAAASJooAgAAkiaKAACApIkiAAAgaaIIAABImigCAACSJooAAICkiSIAACBpoggAAEiaKAIAAJI2rihqa2uL+fPnR0VFRdTV1cXu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3HnnnXHttdfGQw89FDfccENs27Ytfv7zn8djjz12ar8TAJJlNgEwEQVHUVNTUxw5ciQ2bNgQ3d3dsXDhwmhvbx/5g9VDhw6NeirrqquuiqeeeiruueeeuPvuu+Mv/uIv4rnnnotLL730pO8zl8tFS0tL3pcupMy+jM3e5GdfxmZv8jtT9qXYs+lM2ZepYG/ysy9jszf52ZexTcbeFPw5RQAAANPJ6fuXswAAAEUgigAAgKSJIgAAIGmiCAAASNppE0VtbW0xf/78qKioiLq6uti9e/cHnv+DH/wgLrnkkqioqIjLLrssdu7cWaSVFlch+7J169a45pprYubMmTFz5sxoaGj40H08kxX6M/Oebdu2RUlJSSxbtmxyFzhFCt2Xt99+O1avXh1z5syJXC4XF1988bT8/6nQfdm8eXN8/OMfj7PPPjtqa2tjzZo18fvf/75Iqy2en/70p7F06dKYO3dulJSUxHPPPfeh1+zatSs+/elPRy6Xi4997GPx5JNPTvo6p4K5NDazKT9zaWxmU35m04mmbC5lp4Ft27Zl5eXl2RNPPJH913/9V3brrbdm5513XtbT05P3/J/97GdZWVlZ9sADD2SvvPJKds8992RnnXVW9vLLLxd55ZOr0H256aabsra2tmzfvn3Z/v37s7/7u7/Lqqqqsv/+7/8u8sonX6F785433ngjmzdvXnbNNddkf/3Xf12cxRZRofsyMDCQLV68OLv++uuzF198MXvjjTeyXbt2ZV1dXUVe+eQqdF++973vZblcLvve976XvfHGG9nzzz+fzZkzJ1uzZk2RVz75du7cma1fvz575plnsojInn322Q88/+DBg9k555yTNTc3Z6+88kr2rW99KysrK8va29uLs+AiMZfGZjblZy6NzWzKz2zKb6rm0mkRRUuWLMlWr1498u+hoaFs7ty5WWtra97zv/CFL2Q33HDDqGN1dXXZ3//930/qOout0H15v+PHj2fnnntu9t3vfneyljhlxrM3x48fz6666qrsO9/5TrZy5cppOXwK3Zdvf/vb2YUXXpgNDg4Wa4lTotB9Wb16dfbZz3521LHm5ubs6quvntR1TrWTGT5f/epXs0996lOjjjU1NWWNjY2TuLLiM5fGZjblZy6NzWzKz2z6cMWcS1P+8rnBwcHYs2dPNDQ0jBwrLS2NhoaG6OzszHtNZ2fnqPMjIhobG8c8/0w0nn15v3feeSfefffdOP/88ydrmVNivHvz9a9/PWbPnh0333xzMZZZdOPZlx/+8IdRX18fq1evjurq6rj00ktj48aNMTQ0VKxlT7rx7MtVV10Ve/bsGXkZw8GDB2Pnzp1x/fXXF2XNpzOPv+nOpQizaSzm0tjMpvzMplPnVD3+zjiVixqPo0ePxtDQ0Minjr+nuro6Dhw4kPea7u7uvOd3d3dP2jqLbTz78n533XVXzJ0794QflDPdePbmxRdfjMcffzy6urqKsMKpMZ59OXjwYPzHf/xHfPGLX4ydO3fG66+/Hl/+8pfj3XffjZaWlmIse9KNZ19uuummOHr0aHzmM5+JLMvi+PHjcfvtt8fdd99djCWf1sZ6/O3r64vf/e53cfbZZ0/Ryk4dc2lsZlN+5tLYzKb8zKZT51TNpSl/pojJsWnTpti2bVs8++yzUVFRMdXLmVLHjh2L5cuXx9atW2PWrFlTvZzTyvDwcMyePTsee+yxWLRoUTQ1NcX69etjy5YtU720KbVr167YuHFjPProo7F379545plnYseOHXH//fdP9dLgjGY2/YG59MHMpvzMpsk15c8UzZo1K8rKyqKnp2fU8Z6enqipqcl7TU1NTUHnn4nGsy/vefDBB2PTpk3x4x//OC6//PLJXOaUKHRvfvnLX8abb74ZS5cuHTk2PDwcEREzZsyIV199NS666KLJXXQRjOdnZs6cOXHWWWdFWVnZyLFPfOIT0d3dHYODg1FeXj6pay6G8ezLvffeG8uXL49bbrklIiIuu+yy6O/vj9tuuy3Wr18fpaXp/j5prMffysrKafEsUYS59EHMpvzMpbGZTfmZTafOqZpLU7575eXlsWjRoujo6Bg5Njw8HB0dHVFfX5/3mvr6+lHnR0S88MILY55/JhrPvkREPPDAA3H//fdHe3t7LF68uBhLLbpC9+aSSy6Jl19+Obq6ukZun//85+O6666Lrq6uqK2tLebyJ814fmauvvrqeP3110eGcUTEa6+9FnPmzJkWQydifPvyzjvvnDBc3hvOf/i7z3R5/E13LkWYTWMxl8ZmNuVnNp06p+zxt6C3ZZgk27Zty3K5XPbkk09mr7zySnbbbbdl5513Xtbd3Z1lWZYtX748W7t27cj5P/vZz7IZM2ZkDz74YLZ///6spaVlWr71aaH7smnTpqy8vDx7+umns9/85jcjt2PHjk3VtzBpCt2b95uu7/JT6L4cOnQoO/fcc7N/+Id/yF599dXsRz/6UTZ79uzsG9/4xlR9C5Oi0H1paWnJzj333Ozf/u3fsoMHD2b//u//nl100UXZF77whan6FibNsWPHsn379mX79u3LIiJ7+OGHs3379mW/+tWvsizLsrVr12bLly8fOf+9tz79p3/6p2z//v1ZW1vbtH1LbnMpP7MpP3NpbGZTfmZTflM1l06LKMqyLPvWt76VXXDBBVl5eXm2ZMmS7D//8z9H/tu1116brVy5ctT53//+97OLL744Ky8vzz71qU9lO3bsKPKKi6OQffnoRz+aRcQJt5aWluIvvAgK/Zn5/03n4VPovrz00ktZXV1dlsvlsgsvvDD75je/mR0/frzIq558hezLu+++m33ta1/LLrrooqyioiKrra3NvvzlL2f/+7//W/yFT7Kf/OQneR833tuPlStXZtdee+0J1yxcuDArLy/PLrzwwuxf//Vfi77uYjCXxmY25Wcujc1sys9sOtFUzaWSLEv4+TYAACB5U/43RQAAAFNJFAEAAEkTRQAAQNJEEQAAkDRRBAAAJE0UAQAASRNFAABA0kQRAACQNFEEAAAkTRQBAABJE0UAAEDSRBEAAJC0/wcI0tdWvJ5CGQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_samples = 10000\n",
    "sample_idxs = np.random.choice(correlations.flatten().shape[0], size=n_samples, replace=False)\n",
    "\n",
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))\n",
    "\n",
    "ax1.hist(correlations.flatten()[sample_idxs].cpu().numpy(), bins=100)\n",
    "ax1.set_title(\"Correlation to dict\")\n",
    "ax1.set_xlabel(\"Correlation\")\n",
    "\n",
    "ax2.hist(correlations_to_baseline.flatten()[sample_idxs].cpu().numpy(), bins=100)\n",
    "ax2.set_title(\"Correlation to baseline\")\n",
    "ax2.set_xlabel(\"Correlation\")\n",
    "\n",
    "plt.show()\n",
    "plt.close(fig)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
